1.
function MyConstructor() {}
var myobject = new MyConstructor();
MyConstructor.prototype = {protest:"maizere"};
[ myobject instanceof MyConstructor, // false !
myobject.constructor == MyConstructor, // true !
myobject instanceof Object ] // true
console.log(myobject.protest) //undefined
这证明 myobject 不再从 MyConstructor 原型继承属性和方法。
但请参阅下面的代码:
2.
function MyConstructor() {}
var myobject = new MyConstructor();
MyConstructor.prototype.protest= "Maizere";//Do this line gets hoisted?or something else
[ myobject instanceof MyConstructor, // true!
myobject.constructor == MyConstructor, // true !
myobject instanceof Object ] // true
console.log(myobject.protest) //Maizere
为什么会发生这种情况?内部原型的确切定义是什么?这也证明即使在对象实例化之后,proto也引用了 MyConstructor 原型。如果是这样,那么为什么第一个(1.)代码没有引用 MyConstructor 原型?由于属性是在第二个代码中的对象实例化之后添加的,并且对象的内部原型接收它,这意味着我们可以稍后更改原型属性,仍然可以在实例中看到效果。但是相同的定义不起作用在第一个代码中替换原型属性时?