使用子类继承原型链时,子类的prototype就成为了父类的一个实例。因此子类的prototype拥有了父类的属性。但这时子类的所有实例都会共享父类的属性,而此时我们更改某个子类的实例的继承属性时,会影响所有子类的实例。为解决这个为题,可以使用构造函数。
// 为父类型创建构造函数
function SuperType(name) {
this.name = name;
this.color = ['pink', 'yellow'];
this.property = true;
this.testFun = function() {
alert('http://tools.jb51.net/');
}
}
// 为父类型添加方法
SuperType.prototype.getSuerperValue = function() {
return this.property;
}
// 为子类型创建构造函数
function SubType(name) {
SuperType.call(this, name);
this.test = ['h1', 'h2', 'h3', 'h4'];
this.subproperty = false;
}
// 在此处给子类型添加方法,一定要在实现继承之后,否则会在将指针指向父类型的实例,则方法为空
SubType.prototype.getSubValue = function() {
return this.subproperty;
}
构造函数模式解决了原型链模式的问题,但子类只能共享父类的属性不能使用父类的原型方法。