搜索

首页  >  问答  >  正文

javascript - Object和Function的原型链问题

上面是我在浏览器中的测试,懵逼了,这种原型链完全看不懂。谁能帮忙解释一下

仅有的幸福仅有的幸福2831 天前564

全部回复(1)我来回复

  • 滿天的星座

    滿天的星座2017-05-19 10:13:54

    Object 是一个函数,不要被它的名字误导了,所以先脑中补完这个形式

    function Object () {
      ...
    }
    

    任何函数(构造函数)都有原型,也就是prototype,prototype没什么特别的,就是一个对象。

    Object.prototype 输出 “Object { ... }", 不要被这个输出误导,以为Object.prototype是它自己。输出里的“Object”只是说Object.prototype的值“是一个”Object“类型”的对象。

    但同时因为JS里function本身也是对象,所以Object除了是函数,也是对象。所有的对象都是根据某个原型“构造”(初始化)而来的.

    Object作为对象是什么时候构造的?

    答:当它被定义的时候,也就是:

    function Object() {
      ...
    }
    

    这时JS运行时就依据 function () { [Native code] } 为原型构造了Object这个函数“对象”(实例)。

    这个 function () { [Native code] } 是什么?它是JS里所有函数的祖宗。

    Object.__proto__.__proto__ 即这个祖宗函数的原型,既然是祖宗怎么会有原型?记住它是函数的祖宗,但它不是“对象”的祖宗,对象的祖宗,就是这个 “Object {__defineGetter__: ...}" 。

    你又问,既然对象都是构造而来的,那祖宗对象也应该是构造而来的吧?祖宗对象是万物起源,它是JS的语言设计者定义的,是概念体系的出发点。

    可是我看到

    Object.prototype.constructor
    function Object() { [native code] }
    

    祖宗对象不明明是构造而来的?而且是由Object构造而来的?

    这只不过是JS的语言设计者为了概念一致,把祖宗对象的constructor指向了Object而已。

    祖宗对象之前是什么呢?

    Object.prototype.__proto__
    null
    

    道生一,一生二。
    道是无。

    itlr.cc

    回复
    0
  • 取消回复