繁体   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