Почему ob.constructor.prototype == ob .__ proto__ - PullRequest
0 голосов
/ 20 июня 2019

Скажите, если мы создадим объект

var ob = {}

Когда я проверяю

ob.constructor.prototype == ob.__proto__ 

оба одинаковы, как это возможно?

1 Ответ

2 голосов
/ 20 июня 2019

ob является простым объектом, поэтому его конструктор (то есть obj.constructor) равен Object.__proto__ указывает на внутренний прототип чего-либо, а внутренний прототип простого объекта - Object.prototype.

Если вы немного знакомы с наследованием прототипа, поведение может быть более понятным, если ob был создан с new (просто чтобы посмотреть, как это работает - на самом деле вы не должны использовать new Object):

var ob = new Object();
console.log(ob.constructor.prototype == ob.__proto__);
// same as
console.log(ob.constructor.prototype == Object.prototype);
// same as
console.log(Object.prototype == Object.prototype);

Такое же поведение можно наблюдать для всего, что создано с помощью new - его constructor.prototype будет его __proto__:

class Foo {}

const f = new Foo();

console.log(f.constructor.prototype == f.__proto__);
// same as
console.log(f.constructor.prototype == Foo.prototype);
// same as
console.log(Foo.prototype == Foo.prototype);
...