JavaScript的大師,這是給你一個謎:奇怪的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);
..但與原型似乎很奇怪,我。上面的原型代碼的實際應用可以在專業的JavaScript for Web Developers書(第6章,最後幾頁)中找到。
編輯: 感謝攪拌機,但在這裏分別來自新的謎語: 現在如果我們有從單一的同一個對象他們的instanceof相互繼承(但它們是完全不同的)2個對象!
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!
我們該如何解決問題?我如何確定豬不是一匹馬,如果它們都是動物(過去有相同的原型)?
你想做什麼? – Blender
您的Horse和Pig構造函數具有相同的原型,所以這就是爲什麼'a'是Horse的一個實例。確保使用'new Object()'而不是Object.prototype !! –