在Javascript中,为什么实例或对象文字没有"原型"属性?

Han*_*Sun 5 javascript oop functional-programming prototype prototype-programming

在Javascript中,任何"函数对象"都有一个原型

> F = function() {}
F()
> F.prototype
F {}
Run Code Online (Sandbox Code Playgroud)

但"对象"或"实例"没有原型

> o = {}
Object {}
> o.prototype
undefined
> f = new F()
F {}
> f.prototype
undefined
Run Code Online (Sandbox Code Playgroud)

但是,内置对象"Function"和"Object"有一个原型:

> Function.prototype
Empty()
> Object.prototype
Object {}
Run Code Online (Sandbox Code Playgroud)

这对我来说看起来很混乱.

  1. Function 和"函数对象"有一个原型属性

  2. Object 有一个prototype属性,但"object literal"和"instance object"没有prototype属性

prototype财产实际上意味着什么?在上面的例子中,不应该prototype的财产fF

有没有人有关于如何解释这个的想法?谢谢!

dol*_*ldt 5

不要将函数的prototype属性与对象的内部原型(将对象放在原型链中)混淆.

Function并且Object是构造函数,因此,它们具有prototype属性,该属性将被指定为使用这些构造函数创建的对象的内部原型.

我推荐Eloquent Javascript的章节"对象的秘密生活",特别是对于这个引用:

重要的是要注意原型与构造函数(通过其prototype属性)相关联的方式与对象具有原型(可以使用其检索Object.getPrototypeOf)的方式之间的区别.构造函数的实际原型是Function.prototype,因为构造函数是函数.它的prototype 属性将是通过它创建的实例的原型,但不是它自己的原型.