1,Js简单数据类型包括数字,字符串,布尔值(有方法,貌似对象,但它们是不可变的),null,undefined,其它所有的值 都是对象。对象是可变的键值集合。
2,字面量:var stooge={key : value},js中每个对象都连接到一个原型对象。所有通过对象字面量创建的对象都连接到Object.prototype.(在chrome中可通过.__proto__测试)
3,检索对象:点与[],[]在key为变量或关键字时可替代点使用。
4,对象的原型链:只有在对象检索值才被用到。在js对象中检索某个值,没有则顺着原型链找,一直找到Object.prototype,如果还找不到返回undefined。
hasOwnProperty方法可以判断属性是否属于对象本身还是来自原型链。
使用delete操作也可以让原型链中的属性显示出来,因为delete操作不了原型链。
Object.prototype.xxx能在所有对象中访问到xxx
1, 减少全局变量污染,把全局性的资源纳入一个名称空间下,另一个有效的方法是使用闭包。
2, js对象创建的几种方式:
a,字面量
var obj = {a:’aa’,b:’bb’}
b,基于已有对象进行扩充它的属性及方法。这种方式是最简单的,但它的缺点在于不能基于这个对象进行创建新的对象,要新建这个对象还需要将所有代码重新写一遍,也就是说它不具备模板的特性。
var obj = new Object();
obj.name ="zhang"; //扩展对象的属性
obj.setName =function(name){ //扩展对象的方法
this.name = name;
}
obj.setName("li");
alert(obj.name);
c,构造函数方式
function Person(name,age){
this.name = name;
this.age = age;
this.getInfo = function(){
return this.name+" : "+this.age;
}
}
var p = new Person("zhang",23);
alert(p.getInfo());
每个实例对象创建时,方法也会创建多份,浪费空间,所以需要把方法提出来
d,使用原型+构造函数方式
//原型+构造函数方式,属性不能放在原型中,因为属性是每个实例特有的,如果放在
原型中,属性不为简单变量时,改变某一实例属性会影响其他实例属性值,
因为prototype对象被所有实例共享。
function Person(){
this.name = new Array();
this.age = 12;
}
Person.prototype.getInfo = function(){
return this.name+" : "+this.age;
}
var p1 = new Person();
var p2 = new Person();
p1.name.push("zhang");
p2.name.push("li");
alert(p1.getInfo());
alert(p2.getInfo());