Object.getPrototypeOf(obj)
和obj.constructor.prototype
之间有区别吗?或者这两个引用相同的东西?
答案 0 :(得分:9)
否强>
它返回内部[[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
关系的对象。
答案 1 :(得分:2)
否即可。特别是,对象的constructor
属性并不总是设置为您认为“正确”的属性。
getPrototypeOf
工作但[{1}}不工作的示例:
.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);