[英]Linked object's constructor property not overriden on re-assigning prototype
假設我有這段代碼。
function Foo(){}
Foo.prototype.constructor === Foo; // true
var a = new Foo();
a.constructor === Foo; // true
因此,基本上,這里a.contructor
通過委派過程返回Foo,並從Foo.prototype.constructor
獲得該值。
好。 現在,如果我將Foo.prototype寫為
function Foo(){}
Foo.prototype.constructor === Foo; // true
var a = new Foo();
Foo.prototype = {};
Foo.prototype.constructor === Foo; // false
a.constructor === Foo; // true;
最后兩行只是不可消耗的。 a.constructor
也不應被修改並返回與Foo.prototype.constructor
相同的值,因為a畢竟鏈接到Foo.prototype,並且Javascript不會創建副本而是對象之間的鏈接(委托)
JavaScript不會創建副本,而是創建對象之間的鏈接(委托)
並非如此,它存儲對對象的引用。 現在,在您的情況下, Foo.prototype
和a[[prototype]]
引用同一對象,然后更改Foo.prototype
但a[[prototype]]
的引用仍指向舊對象。 但是,如果您這樣做:
Foo.prototype.constructor = null;
這兩個比較都將為假,或者您重寫兩個引用:
Foo.prototype = {};
Object.setPrototypeOf(a, Foo.prototype); // thats like a[[prototype]] = Foo.prototype
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.