簡體   English   中英

奇怪的JavaScript原型繼承

[英]Strange javascript prototypal inheritance

JavaScript專家,這是您的難題:

function aFunc(){}
function bFunc() {}
aFunc.prototype = bFunc.prototype;
a = new aFunc();
console.log(a instanceof bFunc); //true!

為什么是bFunc a實例?

如果是這樣,我可以理解:

function aNext(){}
function bNext(){}
aNext.prototype = new bNext();
a = new aNext();
console.log(a instanceof bNext);

..但是有了原型,對我來說似乎很奇怪。 您可以在《面向Web開發人員的專業JavaScript》一書(第6章,最后一頁)中找到上述原型代碼的實際應用。

編輯:感謝Blender,但是這里分別出現了新的謎語:現在,如果我們有2個從單個相同對象繼承的對象,它們是彼此的instance(但它們是完全不同的)!

function Horse(){} //class chain can be very long
function Pig(){}
Horse.prototype = Object.prototype;
Pig.prototype = Object.prototype;
a = new Pig();
console.log(a instanceof Horse); //true!

我們如何解決問題? 如果它們都是動物(過去具有相同的原型),我如何確定豬不是馬?

MDN

instanceof運算符用於測試對象的原型鏈中是否具有構造函數的prototype屬性。

因此,在你的情況下,測試是否bFunc.prototype是在原型鏈a 由於bFunc.prototype === a.prototype ,它將返回true

答案是:pig_instance.prototype = Object.prorotype = horse_instance.prototype,因此Pig和Horse來自同一原型,instanceof對此進行檢查並返回TRUE。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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