原型|如何讲清楚JS原型链?( 二 )


  • 原型对象跟继承有什么关系呢 ?
请你再思考一个问题
如果原型也是一个对象
那么它必然也应该有自己的原型对象,不是吗?
我们可以通过 p1.__proto__.__proto__ 进行访问
原型|如何讲清楚JS原型链?
本文插图

我们把图画的再简单一点
原型|如何讲清楚JS原型链?
本文插图

从图中可以看出,只要原型对象一直存在
对象P1就拥有了所有原型对象的能力, 我们也管这个叫做 继承
而这些原型对象之间是什么关系呢?
p1
p1.__proto__
p1.__proto__.__proto__
p1.__proto__.__proto__.__proto__
原型链, 因此而得名
需要补充的问题
原型对象真的没有尽头吗?当然不是的, 原型对象由浏览器自动创建, 当然也有它自己的规则
规则如下:
1.每个构造函数在诞生的时候, 都会创建一个该函数的实例对象作为默认原型相当于 Phone.prototype = new Phone();
2.而这个原型对象的原型, 则默认指向Object.prototype相当于 Phone.prototype.__proto__ = Object.prototype;
3.当然, Object.prototype 也是它自己的实例相当于 Object.prototype = new Object();
4. 但是, Object.prototype不再拥有原型对象相当于 Object.prototype.__proto__ = null
5. 因此,原型对象是有上限的p1.__proto__ 可访问
p1.__proto__.__proto__ 可访问
p1.__proto__.__proto__.__proto__ 为null
原型的最重要的作用就是扩展能力
原型|如何讲清楚JS原型链?
本文插图


推荐阅读