Javascript 为什么“instanceof”会产生不同的结果?

Javascript 为什么“instanceof”会产生不同的结果?,javascript,prototype,instanceof,Javascript,Prototype,Instanceof,为什么instanceof操作符在以下两段代码中产生不同的结果,以及它在幕后是如何工作的 1> 2> 现在,如果我执行以下代码,结果会有所不同: MyConstructor.prototype = {}; myobject instanceof MyConstructor **false** 你能解释一下operator的实例是如何工作的吗。我理解javascript中的原型继承是如何工作的,但我无法理解这个场景 instanceof操作符测试构造函数的prototype属性是否出现在对象

为什么instanceof操作符在以下两段代码中产生不同的结果,以及它在幕后是如何工作的

1>

2> 现在,如果我执行以下代码,结果会有所不同:

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**