gpt4 book ai didi

javascript - 令人困惑的 "instanceof "结果

转载 作者:数据小太阳 更新时间:2023-10-29 06:07:11 24 4
gpt4 key购买 nike

    function Foo() {}

function Bar() {}

Bar.prototype = new Foo()

console.log("Bar.prototype.constructor === Foo ? "
+ (Bar.prototype.constructor === Foo))

console.log("new Bar() instanceof Bar? "
+ (new Bar() instanceof Bar))
=> Bar.prototype.constructor === Foo ? true
=> new Bar() instanceof Bar? true

为什么“instanceof”的结果不是“false”,因为“constructor”指的不是自身而是继承的原型(prototype)?

最佳答案

instanceof 不使用 constructor 属性。它在内部调用函数对象的[HasInstance] 方法,这在§15.3.5.3 of the specification 中有描述。 .

它将对象的原型(prototype)(以及对象原型(prototype)的原型(prototype)等)与函数的 prototype 属性进行比较。

类似的实现是:

function myInstanceOf(obj, Constr) {
// get prototype of object
var proto = Object.getPrototypeOf(obj);

// climb up the prototype chain as long as we don't have a match
while (proto !== Constr.prototype && proto !== null) {
proto = Object.getPrototypeOf(proto);
}

return proto === Constr.prototype;
}

据我所知,constructor 属性不被任何内部方法使用,仅被用户生成的代码使用。

关于javascript - 令人困惑的 "instanceof "结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17087977/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com