簡體   English   中英

鏈接對象的構造函數屬性在重新分配原型時不會被覆蓋

[英]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.prototypea[[prototype]]引用同一對象,然后更改Foo.prototypea[[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM