在Javascript中,任何“函数对象”都有一个原型。
> F = function() {}
F()
> F.prototype
F {}
但是“对象”或“实例”没有原型
> o = {}
Object {}
> o.prototype
undefined
> f = new F()
F {}
> f.prototype
undefined
但是,内置对象“函数”和“对象”有一个原型:
> Function.prototype
Empty()
> Object.prototype
Object {}
这对我来说很让人困惑。
Function
和“函数对象”具有一个原型属性Object
有一个prototype属性,但是“对象文本”和“实例对象”没有prototype属性prototype
属性实际上意味着什么?在上面的例子中,prototype
属性f
不应该是F
吗
有没有人想办法解释这件事?谢谢!
发布于 2015-06-29 23:24:57
不要混淆函数的prototype属性和对象的内部原型(将对象放在prototype链中)。
Function
和Object
是构造函数,因此,它们有一个prototype属性,它将被分配为用这些构造函数创建的对象的内部原型。
我推荐雄辩的Javascript的章节“物体的秘密生命”,特别是这句话:
重要的是要注意到原型与构造函数的关联方式(通过其
prototype
属性)和对象拥有原型的方式(可以用Object.getPrototypeOf
检索)之间的区别。构造函数的实际原型是Function.prototype,因为构造函数是函数。它的prototype
属性将是通过它创建的实例的原型,但不是它自己的原型。
https://stackoverflow.com/questions/31131973
复制