Object.getPrototypeOf()与Javascript中的Object.constructor.prototype相同吗?

时间:2011-11-06 02:39:42

标签: javascript inheritance constructor prototype-programming

Object.getPrototypeOf(obj)obj.constructor.prototype之间有区别吗?或者这两个引用相同的东西?

2 个答案:

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