从我对原型的阅读中,我的印象是对构造函数原型的更改将反映在使用该构造函数创建的所有对象中。
考虑这段代码:
var Class1 = function(){
this.prop1 = 'value1';
};
Class1.prototype.prop2 = 'value2';
var Class2 = function(){
this.prop3 = 'value3';
};
//Class2.prototype = new Class1(); //1*
var obj1 = new Class2();
Class2.prototype = new Class1(); //2*
console.log('1 ' + obj1.prop1); // undefined
console.log('2 ' + obj1.prop2); // undefined
console.log('3 ' + obj1.prop3); // value3
如您所见,因为我在构造 obj1 后将 Class1 原型分配给 Class2,所以 prop1 和 prop2 的值返回“未定义”。
如果取消注释 1* 并注释掉 2*,则结果与预期一致。
在过去的几天里,我读了很多关于原型的文章,没有人提到顺序很重要。