好吧,我一直认为原型属性存在于所有对象中。但在一次面试之后,我回到家并打开镀铬控制台
window.prototype
**undefined**
WTF?
Object.prototype
**Object {}**
行
var a = {};
a.prototype
**undefined**
var a = function(){}
a.prototype
**Object {}**
我已多次阅读https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype,但仍不清楚。有人可以解释一下吗?
感谢名单
P.S。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype
JavaScript中的所有对象都来自Object;所有物体 从Object.prototype继承方法和属性,尽管它们 可以被覆盖(除了具有空原型的Object,即 的Object.create(空)
window是Object,因此它必须具有原型属性
答案 0 :(得分:7)
实例继承的对象(其原型)存储在内部属性[[Prototype]]
中。可以使用Object.getPrototypeOf()
(在ES5兼容的引擎中)检索其值。
console.log(Object.getPrototypeOf(window));
// Window { ... }
var a = {};
console.log(Object.getPrototypeOf(a));
// Object { ... }
只有function
明确拥有prototype
property:
console.log(typeof Object);
// 'function'
并且prototype
的值仅用于在创建[[Prototype]]
实例时设置实例new
的值。
function Foo() {}
var bar = new Foo();
console.log(Foo.prototype === Object.getPrototypeOf(bar)); // true