[英]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.