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);