原型(_proto_)和原型(prototype)与拓展
前言:
没有直接接触原型、proto、prototype、甚至是constructor可以看看下面这张图.
我们打印实例化对象:
我们打印函数(构造)(以对象的结构输出):
这里是String实例化对象和String构造函数。
我们注意到其中的__proto__、prototype两个属性,而且没有直接包含constructor属性。
ps:有可能__proto__被[[prototype]]代替,他们是一个属性,只是显示不一样,后面都用__proto__。
回到主题:原型讲解
我们先提出总结:
- 函数的原型是prototype
- 对象的原型是__proto__
- js中函数可以看作对象,所以作为对象时原型是__proto__
所以:函数一定包含__proto__和prototype,而对象有且只有__proto__。 - 原型之中包含constructor,该属性指向以此为原型的函数。
- 函数构造的对象的原型就是函数a的原型
所以总结:
函数.prototype===对象._proto_
对象._proto_.constructor===函数.prototype.constructor===函数
特殊情况:构造函数作为对象时__proto__.constructor应该指向一个函数,是谁?
系统统一设置为Function构造函数————“构造的构造”,而Function构造函数的构造就是他自己。
所以:
函数(对象).proto.constructor===Function函数
函数(对象).proto===Function函数.prototype
函数(对象).proto.constructor===Function函数(对象).proto.constructor===Function函数
总结完毕:开始一步一步讲解:
未完待续...