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