Instanceof в js

Павел Юхневич

Можете объяснить мне разницу между

function A() {}

A.prototype = {};

var a = new A();

alert( a instanceof A ); // true

и

function A() {}

var a = new A();

A.prototype = {};

alert( a instanceof A); // false
1 ответ

Павел Юхневич

instanceof проверяет, что хотя бы один из __proto__ в цепочке прототипов объекта совпадает с prototype функции. В первом случае первый же совпадёт (так работает new), а во втором - нет, поскольку у объекта осталась ссылка на тот объект, который был до присваивания.

function A() {}
A.prototype = {};
var a = new A();

console.log(a instanceof A);
console.log(a.__proto__ === A.prototype);
function A() {}
var a = new A();
A.prototype = {};

console.log(a instanceof A);
console.log(a.__proto__ === A.prototype);
console.log(a.__proto__.__proto__ === Object.prototype);
console.log(a.__proto__.__proto__.__proto__);

licensed under cc by-sa 3.0 with attribution.