Your Browser Don't Support Canvas, Please Download Chrome ^_^``

JS中的__proto__、prototype、constructor

"困惑了好久,今天梳理下"

字数: 123123   阅读数: 0
Posted by Kerwin She on December 8, 2017

本篇文章参考了这位大神,哪里写的不好的请见谅并帮忙指出

先附上一张比较经典的图片 proto&&prototyp

接下来简单的介绍下proto、prototype、constructor这三者的概念

__ proto __

在js中所有对象都拥有属性__proto__,可称为隐式原型,一个对象的隐式原型指向构造该对象的构造函数的原型,这也保证了实例能够访问在构造函数原型中定义的属性和方法

prototype

——原型属性(prototype)是方法(Function)对象特有的! ——原型属性(prototype)是方法(Function)对象特有的! ——原型属性(prototype)是方法(Function)对象特有的! 这个属性是一个指针,指向一个对象,这个对象的用途就是包含所有实例共享的属性和方法(我们把这个对象叫做原型对象)。原型对象也有一个属性,叫做constructor,这个属性包含了一个指针,指回原构造函数。

constructor

这个属性是会出现在原型对象上,指向该原型对象对应的构造函数

总结:

  • proto : 实例对象获取原型对象
  • prototype:** 构造函数(所有函数)特有的获取原型对象**
  • constructor:原型对象中指向构造函数
  • 原型对象作为实例对象通过proto属性取得的原型对象最终都是Object.prototype
  • 所有函数作为实例对象通过proto属性取得的原型对象最终都是Function.prototype(也是个函数)
  • Function.prototype作为实例对象通过proto属性取得的原型对象最终都是Object.prototype