Object.getPrototypeOf(o)方法问题

时间:2014-06-19 09:52:20

标签: javascript ecmascript-5 prototype-programming

我很难理解Object.getPrototypeOf(o)。我在下面的代码中使用该方法。

var obj0 = {x: 10};

var obj1 = Object.create(null, {
  'name': {value: 'first object name', enumerable: false}, 
});

var obj2 = Object.create(obj1, {
  'location': {value: 'second object location'},
});

alert(Object.getPrototypeOf(obj0)); // [object Object]
alert(Object.getPrototypeOf(obj1)); // null
alert(Object.getPrototypeOf(obj2)); // TypeError: Cannot convert object to primitive value

我很感激任何提示:

1 /为什么object2返回TypeError?

2 / Object.getPrototypeOf方法始终返回[object Object]作为"最高对象"在原型链?我认为它会给我它最近的"链中的对象如此。如果有obj3将obj0作为原型,它会给我[obj0 Object]而不是[object Object]。

1 个答案:

答案 0 :(得分:1)

这只是使用alert的问题,它将警报对象转换为String。 [object Object]{}的字符串表示形式:

({foo: 'bar'}).toString(); // [object Object]

您应该使用控制台进行测试,这将显示对象的更好表示(请参阅example on JSFiddle)。

此示例中还有一个新对象obj3,它显示Object.getPrototypeOf() 返回最近的对象,而不是根原型。