为什么由新Object()创建的对象的原型未定义?

时间:2013-12-02 17:34:31

标签: javascript

Chrome只需使用以下代码记录undefined

<!DOCTYPE html><html lang="en"><body><script>

var cody = new Object();

console.log(cody.prototype);

</script></body></html>

我觉得它应该是Object.prototype,但现在是undefined,为什么?

我尝试for (var p in cody){console.log(p);},但什么都没有。

2 个答案:

答案 0 :(得分:2)

构造函数(在本例中为Object)具有prototype属性。实际的实例the __proto__ property中获取对原型的引用:

var cody = new Object();
console.log(cody.__proto__ === Object.prototype);
// => true

请注意,未标准化。来自MDN文档:

  

此功能不符合标准,不符合标准。不要在面向Web的生产站点上使用它:它不适用于每个用户。实现之间可能存在很大的不兼容性,并且行为可能在将来发生变化。

在现代浏览器中,你也可以 使用Object.getPrototypeOf

console.log(Object.getPrototypeOf(cody) === Object.prototype);
// => true

答案 1 :(得分:0)

prototype是一个特殊的属性函数,被赋予新创建的对象的[[Prototype]](注意区别)。要获得[[Prototype]]值,您可以执行以下操作:

var cody = new Object();
console.log(Object.getPrototypeOf(cody)); // Object {}

换句话说,原型是未定义的,因为cody不是一个函数。对象cody从它的内部[[Prototype]]属性继承其属性,这是“正常”方式无法访问的。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf