Почему оператор instanceof дает разные результаты в следующих двух фрагментах кода и как он работает за кулисами?
1>
function MyConstructor() {}
MyConstructor.prototype = {};
var myobject = new MyConstructor();
myobject instanceof MyConstructor
**true**
2> теперь, если я выполню следующий код, результат будет другим:
MyConstructor.prototype = {};
myobject instanceof MyConstructor
**false**
Можете ли вы объяснить, как работает экземпляр оператора. я понимаю, как прототипное наследование работает в javascript, но я не могу понять этот сценарий.
@bergi уверен, что есть. jsfiddle.net/7phcL3qm. Переопределение прототипа чем-то другим приводит к такому поведению...



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


The instanceof operator tests whether the prototype property of a constructor appears anywhere in the prototype chain of an object.
Итак, если вы переназначите прототип, прототип myobject не будет === (новым) MyConstructor.prototype, поэтому instanceof разрешается в false.
function MyConstructor() {}
MyConstructor.prototype = {};
var myobject = new MyConstructor();
console.info(myobject instanceof MyConstructor);
console.info(Object.getPrototypeOf(myobject) === MyConstructor.prototype);
MyConstructor.prototype = {};
console.info(myobject instanceof MyConstructor);
console.info(Object.getPrototypeOf(myobject) === MyConstructor.prototype);но поскольку в обоих случаях мы назначаем пустой объект в качестве прототипа, как он узнает, что предыдущий пустой объект является правильным прототипом, а не последним? я как бы хочу знать, как это работает за кулисами
Он проверяет MyConstructor.prototype в тот момент, когда вы используете instanceof MyConstructor. С кодом, который вы только что опубликовали, прототип всегда один и тот же (это от === до foo), поэтому instanceof всегда разрешается в true.
когда я вывожу MyConstructor.prototype в chrome dev tools, я вижу пустой объект с прото в качестве объекта. откуда он знает, что это правильный прототип
Внутренности Javascript знают, что foo ссылается на тот же объект в памяти, что и MyConstructor.prototype, который является тем же объектом, что и Object.getPrototypeOf(myobject), поэтому instanceof всегда разрешается в true.
потому что
{} !== {}