了解完整原型链对我们有什么帮助?
没什么帮助,装逼意义大于实用(doge)
好的吧,可能是我还是新手,没碰上这方面的需求
完整原型链图示
上图里,我们常用的部分是右下至右上的链,即从构造函数到构造函数原型对象再到null
的部分。
而实际上,我们常见的Function
和Object
也参与了原型访问链。
在这个图中,不管将哪个块当作实例对象,总有一个构造函数和一个原型对象和它组成三角关系。
只有一个块例外,那就是Object.prototype
。若Object.prototype.__proto__ === Object.prototype
,则原型链访问将一直访问Object.prototype
没有尽头,故底层规定Object.prototype.__proto__ === null
,使原型链访问停止。
以下是4点总结:
- 所有构造函数都是
Function
的实例对象,包括Function
自身,所有构造函数的__proto__
都指向Function.prototype
,即所有构造函数都继承Function
的原型对象。 - 所有原型对象都是
Object
的实例对象,所有原型对象的__proto__
都指向Object.prototype
,即所有原型对象都继承Object
的原型对象。 Function
可通过__proto__
访问自己的原型对象,也可通过prototype
访问自己的原型对象。这是因为Function
本身也是Function
的实例对象,把Function
当成构造函数看,它可通过prototype
访问原型对象,把Function
当成实例对象看,它可通过__proto__
访问原型对象。
Object.prototype.__proto__
指向null
,原型链访问到这里停止
如有不对,欢迎指正,
以上。