2012年5月24日星期四

javascript的原型继承

参考:
http://javascriptweblog.wordpress.com/2010/06/07/understanding-javascript-prototypes/
http://javascript.crockford.com/inheritance.html

1. 原型继承的所谓原型是一个对象。
2. javascript的function才有prototype属性,这个属性存储的是原型对象的引用,这个主要是为了创建对象时,使用原型对象进行初始化新对象。
3. 在实现中,如firefox,每个对象都有一个__proto__的属性(function也是一个对象,继承的原型是Function)。这个属性也是指向原型对象的引用,只不过是由javascript内部维护的,在创建新对象时,javascript内部会将其赋值为prototype属性(this.__proto__ = fn.prototype, fn为声明的function名称),当访问对象的变量或方法时,如果该对象没有声明次变量或方法,则去__proto__指向的原型对象中去找。prototype属性只是提供给javascript的使用者提供的一个设置原型对象的途径,所有的类似访问对象,或instanceof之类的操作,都是依赖__proto__属性完成的,所以,如果把prototype属性重新复制为一个新的对象,由于是通过__proto__去找的,所以如果不相应的修改__proto__,是找不到对应的属性的。(具体见下面的例子)


01var A = function(name) {
02    this.name = name;
03}
04
05var a = new A('alpha');
06a.name; //'alpha'
07
08A.prototype.x = 23;
09
10a.x; //23

01var A = function(name) {
02    this.name = name;
03}
04
05var a = new A('alpha');
06a.name; //'alpha'
07
08A.prototype = {x:23};
09
10a.x; //null

没有评论:

发表评论