JS_prototype

prototype、proto和constructor的三角关系【只做探讨, ES6不建议使用改属性】

|- - 概念
      |- 构造函数 用来初始化新创建的对象的函数是构造函数
      |- 实例对象 通过构造函数的new操作创建的对象是实例对象
      |- 原型对象及prototype 构造函数有一个prototype属性,指向实例对象的原型对象。通过同一个构造函数实例化的多个对象具有相同的原型对象。经常使用原型对象来实现继承              Foo.prototype.constructor === Foo
      |- constructor 原型对象有一个constructor属性,指向该原型对象对应的构造函数 f1.constructor === Foo
      |- proto 实例对象有一个proto属性,指向该实例对象对应的原型对象 f1.__proto__ === Foo.prototype
|- - Foo 构造函数
      |- 实例对象f1继承原型对象Foo.prototype的constructor属性 f1.constructor === Foo
|- -Object
      |- Foo.prototype是f1的原型对象,同时它也是【实例对象】(任何对象都可以看做是通过Object()构造函数的new操作实例化的对象)
      |- Foo.prototype作为实例对象,它的构造函数是Object(),原型对象是Object.prototype Foo.prototype.__proto__ === Object.prototype
      |- 实例对象Foo.prototype本身具有constructor属性,所以它会覆盖继承自原型对象Object.prototype的constructor属性
         Foo.prototype.constructor === Foo Object.prototype.constructor === Object
|- - Function 任何函数都可以看做是通过Function()构造函数的new操作实例化的结果
      函数Foo当成实例对象的话,其构造函数是Function(),其原型对象是Function.prototype Foo.__proto__ === Function.prototype
      函数Object的构造函数也是Function(),其原型对象是Function.prototype Object.__proto__ === Function.prototype
      实例对象Object和Foo本身没有constructor属性,需要继承原型对象Function.prototype的constructor属性 Object.constructor === Function
      Function作为实例对象,其构造函数是Function,其原型对象是Function.prototype Function.__proto__ === Function.prototype
      Function.prototype作为实例对象, 原型对象是Object.prototype,其原型函数是Object() unction.prototype.__proto__ === Object.prototype
      Object.prototype的原型对象是null Object.prototype.__proto__ === null

详细教程 https://www.cnblogs.com/xiaohuochai/p/5721552.html#anchor1

posted @ 2018-03-02 08:57  Iven_Han  阅读(129)  评论(0编辑  收藏  举报