1.如何构成原型链
2.原型链上属性的增删改查
原型链上的增删改查和原型一致,只有本人能操作
3.绝大多数对象最终会继承自Object.prototype
4.Object.create(原型)
原型链其实就是一个对象通过原型继承的方式,继承了许多个原型,这些原型由近到远呈链式状态排序,存放在对象的_proto_上,对象根据需要,由进到远的获取原型链上的属性。
举例:
son获取Grand() prototype上的属性
image.png
解释继承的过程:
首先构造出Grand()时,Grand()就有了他的prototype属性,并往prototype中添加了name属性;
当通过构造函数构造出grand对象时,grand就通过自己的_proto_属性找到了Grand()的prototype;
继续构造出Father(),并将grand对象赋值给自己的prototype,这一句可理解为,grand的_proto_中存了Grand()的prototype,将grand赋值给Father.prototype时,Father.prototype就可以通过grand的_proto_找到Grand()的prototype,所以Father.prototype继承了Grand.prototype;
当用构造函数Father()构造出对象father时,father对象就通过自己的_proto_找到了Father()的prototype,这时father对象就继承了Grand()的prototype;
继续构造Son()函数,并将father对象赋值给Son的prototype,Son.prototype便通过father对象的_proto_找到Father.prototype,而Father.prototype通过grand对象继承了Grand.prototype,所以father对象的_proto_就存放了Grand()的prototype。
son-->son._proto_-->Son.prototype-->father-->father._proto_-->Father.prototype-->grand._proto_-->Grand.prototype
son对象中的原型链:
image.png
son的原型链的顶端就是Grand.prototype
总结:原型链与原型链之间其实是通过各自对象的_proto_进行连接,_proto_中存放的就是对象的prototype
原型链上的属性同样符合只能自己修改的原则
举例:
给Father.prototype添加属性,由于Father.prototype继承自Grand.prototype,所以Father.prototype自身的操作并不影响Grand.prototype
image.png
绝大多数的对象最终会继承自Object.prototype如何理解
首先prototype也是一个对象,他同样有_proto_属性,里面也存放着prototype的prototype,也就是说原型上也有原型。
所以前面提到的son对象原型的顶端应该是Object.prototype,因为Grand.prototype里也有_proto_属性,里面存放的是Grand.prototype的prototype,通过查看Grand.prototype的_proto_存放的是Object.prototype
image.png
var obj = Object.create(原型) obj就能继承自create里的原型
举例:
image.png image.png
网友评论