является объектом.getPrototypeOf () то же, что и Object.конструктор.прототип в Javascript?
есть ли разница между Object.getPrototypeOf(obj)
и obj.constructor.prototype
? Или эти двое ссылаются на одно и то же?
2 ответов
нет
он возвращает внутреннюю [[Prototype]]
значение.
например:
var o = Object.create(null);
Object.getPrototypeOf(o); // null
o.constructor.prototype; // error
var p = {};
var o = Object.create(p);
Object.getPrototypeOf(o); // p
o.constructor.prototype; // Object.prototype
o.constructor.prototype
работает только с объектами, созданными с помощью new ConstructorFunction
или где вы вручную установили Prototype.prototype.constructor === Prototype
отношения.
нет. В частности,constructor
свойство объекта не всегда устанавливается на то, что вы считаете "правильным"."
пример, где getPrototypeOf
работает, а .constructor.prototype
нет:
function F() { }
F.prototype = {
foo: "bar"
};
var obj = new F();
assert.equal(obj.constructor.prototype, Object.prototype);
assert.equal(Object.getPrototypeOf(obj), F.prototype);
Он также терпит неудачу для типичных прототипических сценариев наследования:
// G prototypally inherits from F
function G() { }
G.prototype = Object.create(F.prototype);
// or: G.prototype = new F();
var obj2 = new G();
assert.equal(obj2.constructor.prototype, Object.prototype);
assert.equal(Object.getPrototypeOf(obj2), G.prototype);
assert.equal(Object.getPrototypeOf(Object.getPrototypeOf(obj2)), F.prototype);