在Javascript中,任何“函数对象”都有一个原型
> F = function() {}
F()
> F.prototype
F {}
但“对象”或“实例”没有原型
> o = {}
Object {}
> o.prototype
undefined
> f = new F()
F {}
> f.prototype
undefined
但是,内置对象“Function”和“Object”有一个原型:
> Function.prototype
Empty()
> Object.prototype
Object {}
对我来说这看起来很混乱。
Function
和“function object”具有原型属性
Object
有一个prototype属性,但“object literal”和“instance object”没有原型属性
prototype
属性实际上意味着什么?在上面的示例中,prototype
的{{1}}属性不应该是f
吗?
有没有人有关于如何解释这个的想法?谢谢!
答案 0 :(得分:5)
不要将函数的prototype属性与对象的内部原型(将对象放在原型链中)混淆。
Function
和Object
是构造函数,因此,它们有一个prototype属性,它将被指定为使用这些构造函数创建的对象的内部原型。
我推荐 Eloquent Javascript 的章节"The secret life of objects",特别是对于此引用:
重要的是要注意原型与构造函数关联的方式(通过其
prototype
属性)与对象具有原型的方式之间的区别(可以使用Object.getPrototypeOf
)。构造函数的实际原型是Function.prototype,因为构造函数是函数。它的prototype
属性将是通过它创建的实例的原型,但不是它的自己的原型。