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

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

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

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

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

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

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

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

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

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

你可能感兴趣的:(关于js原型链和类继承的理解)