JavaScript 大师,这里有一个谜题给你:
function aFunc(){}
function bFunc() {}
aFunc.prototype = bFunc.prototype;
a = new aFunc();
console.log(a instanceof bFunc); //true!
为什么是a
实例bFunc
?
如果是这样的话,我可以理解:
function aNext(){}
function bNext(){}
aNext.prototype = new bNext();
a = new aNext();
console.log(a instanceof bNext);
..但是原型对我来说似乎很奇怪。您可以在 Professional JavaScript for Web Developers 一书(第 6 章,最后几页)中找到上述原型代码的实际应用。
编辑: 感谢 Blender,但这里分别出现了新的谜题:现在如果我们有 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!
我们如何解决问题?如果它们都是动物(过去具有相同的原型),我如何确定猪不是马?