日期:2014-05-16  浏览次数:20344 次

JavaScript使用总结(对象、prototype属性、变量)

近大半年来一直做Yahoo!Widget开发,用到了JavaScript,最近离职了总结一下JavaScript的使用,主要是自己的理解和实验结果,有不同见解的欢迎讨论。
一、JavaScript中的条件判断
在JavaScript中既可用条件判断语句也可使用任意数据类型甚至赋值语句作为判断条件
1、条件判断语句就不用说了,就是最终会返回true或false的语句。
2、使用数据作为判断条件时,非零数字与逻辑true等同,数字‘0’与逻辑false等同,空字符串、null、undefined与逻辑false等同。
3、使用赋值语句作为判断条件时,如a = b,其效果等同于 a | b
示例:

if(0){//此处是使用数字‘0’作为判断条件,所以其逻辑效果就等同于false
return 0}
else return 1;
if(a = 0){//此处是使用赋值语句作为判断条件,所以其逻辑效果就等同于 a | 0
return 0}
else return 1;

二、对象的实例化及使用

1、获取对象大致有两种方式,一是直接获得对象实例,二是通过构造函数构造一个对象实例。(构造函数稍后详讲)

//直接获得对象实例
var a = {
this.name = “name”
this.getName = function(){
return this.name};
}

//直接获得空对象
var a = {};
var a = new Object();//var a = new Object(){};这种定义是不被允许的

//JSON方式获得对象实例
var a = {
“name”:”name”,
“getName”:function(){return this.name}
}

//JSON方式获得对象实例也可用下面这种
var a = {
name:”name”,
getName:function(){return this.name}
}

//先声明一个构造函数,然后通过该构造函数构造一个此对象
function A(name){
this.name = name;
this.getName = function(){
return this.name}
}
Var a = new A("han");

?2、对象属性

访问一个对象的属性,可以简单的用对象名加"."后加属性的名字,也可以用"[]"操作符来获取,此时在[]里面的属性名字要加引号,这是因为对象中的索引都是字符串类型的.如a[“name”]可以,但a[name]不可以。

因为JS可以将数字自动包装成string,所以这种写法(a[“name” + 1])是正确的。a[“name” + 1]就相当于a[“name1”]

?

每一个javascript对象都有一个constructor属性.这个属性对应了对象初始化时的构造函数.试着打印出无构造器对象的constructor,会发现它和new Object()的constructor的是一样的。

?

对象实例化后可以给对象动态添加属性或方法

function A(name){
this.name = name;
this.getName = function(){
return this.name}
}
var a = new A("han");

//对象实例化后给对象动态添加属性或方法
a.age = 20;//或 a["age"] = 20;
a.setName = function(name){this.name = name};//或a["setName"] = ...
?

Array也是对象所以可以给Array对象添加属性或方法

var a = new Array();
a.name = "Array";//或a["name"] = "Array";
a.getName = function(){return this.name} //或a["getName"] = ...

?

Array对象的长度是可以动态改变的

var a = new Array();//声明一个长度为0的数组
var b = new Array(10);//声明一个长度为10的数组,未被赋值的元素的值与null,undefined等价的
var c = new Array(1,2);//声明一个长度为2的数组,包含1和2两个元素

//Array对象声明完后可以动态指定它的长度
a.length = 10;//将数组a的长度指定为10
b.length = 5;//将数组b的长度重新指定为5,则b只保留前5个元素,后5个将被舍弃
c[10] = 11;//c原先的长度为2,没有索引为10的元素,此赋值语句等于变相指定c的长度为11,且索引为10的元素的值为11

//也可以通过下面这种方式指定c中索引为10的元素的值
c["10"] = 11;//这与c[10] = 11的效果等同,虽然这与给对象添加属性很类似,但使用时只能通过c["10"]或c[10]引用,而不能通过a.10使用
//注意下面的声明方式的不同
var a = new Array(1);//声明一个长度为1的空数组
var b = new Array("1");//声明一个长度为1的数组,且b[0] = 1
var c = new Array("a");//声明一个长度为1的数组,且c[0] = "a"
?

?

通过以上可以看出,我们在使用Array对象时一般没有必要声明它的长度。如果要保存固定长度和名称的属性建议使用对象,如果是不定长或临时数据可以使用数组或闭包。

?

三、对象、函数、原型

?

1、函数的arguments属性

函数可以接收可变长度参数,且在定义函数时不必指明参数的名称,我们可以使用函数的arguments属性(每个函数都默认含有arguments属性,所有 参数会被顺序放到一个类似数组的对象中,函数的arguments拥有对它的引用)来引用这些参数。

function f(){
if(arguments.length){
    for(var i = 0;i < arguments.length; i++){
        alert(arguments[i]);
        }
}
}

//调用函数f
f(1,2,3);//会依次打印出1,2,3
f(1);//会打印出1
f();//不打印

?

2、函数的prototype属性

每一个函数都包含了一个prototype属性(对象没有此属性),这个属性指向了一个prototype对象,我们可以指定函数对应的prototype对象,如果不指定,则函数的prototype属性指向一个默认的prototype对象,并且此默认prototype对象的constructor属性又指向该函数。

?

?

?

若给函数的prototype属性指定一个prototype对象,则此prototype对象的constructor属性指向该prototype对象的构造函数。

?

?

函数在指定一个prototype对象时,此prototype对象要保证已经被实例化,否则会出错。

?

?

3、使用构造函数构造对象及原型的使用

?

构造函数就是JavaScript中的函数,只不过这个函数被用来构造对象,像是一个构造器,所以称这种特殊用途的函数为构造函数。

使用构造函数构造对象的过程:

当我们使用new操作符时,javascript会先创建一个空的对象,然后这个对象被new后面的函数的this关键字引用,