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);}
,但什么都没有。
答案 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]]属性继承其属性,这是“正常”方式无法访问的。