关于js原型链和类继承的理解

了解过 javascript 的人基本都知道JS继承的其它语言的继承是有些不一样的,其它的语言的继承是基于类的继承,而JS的继承是基于原型的继承。

基于类的继承和基于原型的继承有什么差别呢?

JavaScript 是基于原型的语言。当我们调用一个对象的属性时,如果对象没有该属性,JavaScript解释器就会从对象的原型对象上去找该属性,如果原型上也没有该属性,那就去找原型的原型。这种属性查找的方式被称为原型链(prototype chain)。

而基于类的继承,新建的子类从一个或多个父类那里获得父类的特性,实例再从子类获得特性。而实例一旦产生,将无法通过修改类的结果来影响它。

而JS的继承,可以修改对象的原型,也可以修改原型的原型属性,而且是动态改变实例对象的属性。

而JS中原型继承的实现有3种方法,它们是在不同规范、不同场景下的产物,但都可以实现原型继承。具体选那种看应用的场景。

在原型继承中,prototype 是一个原型对象的一个对象属性,而在这个对象属相上又有自己的属相。这些概念绕来绕去是比较容易混淆的。

proto 是一个指向对象原型的prototype的应用,可以动态改变它的指向。

最后在说一下,JS的原型对象的几个概念及其关系容易混淆,应该深入了解它们的关系才能更好地记忆这个知识点。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容