Javascript 为什么“instanceof”会产生不同的结果?
为什么instanceof操作符在以下两段代码中产生不同的结果,以及它在幕后是如何工作的 1> 2> 现在,如果我执行以下代码,结果会有所不同:Javascript 为什么“instanceof”会产生不同的结果?,javascript,prototype,instanceof,Javascript,Prototype,Instanceof,为什么instanceof操作符在以下两段代码中产生不同的结果,以及它在幕后是如何工作的 1> 2> 现在,如果我执行以下代码,结果会有所不同: MyConstructor.prototype = {}; myobject instanceof MyConstructor **false** 你能解释一下operator的实例是如何工作的吗。我理解javascript中的原型继承是如何工作的,但我无法理解这个场景 instanceof操作符测试构造函数的prototype属性是否出现在对象
MyConstructor.prototype = {};
myobject instanceof MyConstructor
**false**
你能解释一下operator的实例是如何工作的吗。我理解javascript中的原型继承是如何工作的,但我无法理解这个场景
instanceof操作符测试构造函数的prototype属性是否出现在对象的prototype链中的任何位置
因此,如果重新分配原型,myobject
的原型将不会==
到(新的)MyConstructor.prototype
,因此的实例解析为false
函数MyConstructor(){}
MyConstructor.prototype={};
var myobject=新的MyConstructor();
log(MyConstructor的myobject实例);
console.log(Object.getPrototypeOf(myobject)==MyConstructor.prototype);
MyConstructor.prototype={};
log(MyConstructor的myobject实例);
console.log(Object.getPrototypeOf(myobject)==MyConstructor.prototype)因为{}!=={}
@bergi当然有。用不同的东西覆盖原型会导致这种行为……但既然我们在这两种情况下都将一个空对象指定为原型,那么它如何知道前一个空对象是正确的原型而不是后一个?我有点想知道它在场景后面是如何工作的,在您使用MyConstructor的实例时,它检查MyConstructor.prototype。对于您刚刚发布的代码,原型始终是相同的(它是==
到foo
),因此instanceof
总是解析为true
。当我在chrome开发工具中输出MyConstructor.prototype
时,我看到一个以proto为对象的空对象。它如何知道它是正确的原型JavaScript内部成员知道foo
引用了内存中与MyConstructor.prototype
相同的对象,该对象与object.getPrototypeOf(myobject)
相同,因此的实例总是解析为true
。
MyConstructor.prototype = {};
myobject instanceof MyConstructor
**false**