日期:2014-05-16  浏览次数:20481 次

为什么组合继承不会相互影响实例?

function SuperType(name) {
this.name = name;
this.colors = ['red', 'blue', 'green'];
}
SuperType.prototype.sayName = function() {
alert(this.name);
};

function SubType(name, age) {
SuperType.call(this, name);
this.age = age;
}
SubType.prototype = new SuperType();
SubType.prototype.sayAge = function() {
alert(this.age);
};

var instance1 = new SubType('Nicholas', 29);
instance1.colors.push('black');
alert(instance1.colors);

instance1.sayName();
instance1.sayAge();

var instance2 = new SubType('Greg', 27);
alert(instance2.colors);
instance2.sayName();
instance2.sayAge();


我不明白为什么用“借用构造函数”(即:SuperType.call(this, name);),colors会相互独立??

------解决方案--------------------
colors相互独立是啥意思,是指为什么instance1和instance2中的colors不一样吗?

--colors这个属性,是构造函数内部用this来指定给对象的,也就是说每new一次,就会生成一个colors并添加到new出来的对象上,这些colors属性只是具有相同的值“['red', 'blue', 'green']”而已,但彼此是独立的(即:其中任何一个colors变化都不会影响到其他的colors,就像instance1.colors添加新元素并没有影响到instance2.colors一样)。构造函数中指定的属性不同于原型中的属性,原型中的属性是所有对象共享的,即:改变一个colors,其他的的colors也随之改变。