每个函数都包含一个prototype属性,每个实例有一个[[Prototype]]属性,一般是无法访问到的,它指向对象构造函数的原型对象。
使用原型链继承:
function SuperType()
{ this.property = true; } SuperType.prototype.getSuperValue = function () { return this.property; }; //子类 function SubType() { this.subproperty = false; } SubType.prototype = new SuperType(); SubType.prototype.getSubValue = function () { return this.subproperty; } var su = new SuperType(); var instance = new SubType();
SubType的prototype指向一个SuperType的实例,那么SubType的实例便获得了SuperType的所有属性和方法,而因为又在SubType的prototype中定义了getSubValue方法,所以这个也变为SubType的实例方法,而property属性则是SubType原型的一个属性了。
原型链继承模式的问题在于如果父类包括引用类型属性,他会造成被所有实例共享。