从我对原型的阅读中,我的印象是构造函数原型的更改将反映在使用该构造函数创建的所有对象中。
考虑以下代码:
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的值返回'undefined'。
如果取消注释1 *并注释掉2 *,则结果与预期一致。
在过去的几天里,我对原型进行了大量的阅读,没有人提到订单很重要。
答案 0 :(得分:1)
当然,顺序很重要,因为new
键盘强制ECMAscript返回一个新的Object
新的prototype
,其{{1}}绑定到任何父对象。所以第二个你创建一个“Class”对象的实例(术语Class在ECMAscript中根本没有位置)引擎必须知道原型链。