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());
原文:http://zhangyaping.blog.51cto.com/6703970/1745256