在 JavaScript 中,继承是一个重要的概念,它允许我们从一个对象(父对象)继承属性和方法到另一个对象(子对象)。在早期的 JavaScript 中,继承是通过原型链实现的,但是随着 JavaScript 的发展,ES6 引入了 class 关键字来实现继承。在 ECMAScript 2021 中,class 继承已经成为了主流。
原型继承
在 JavaScript 中,每个对象都有一个原型(prototype)对象,它包含了一些属性和方法。当我们访问一个对象的属性或方法时,如果该对象本身没有这个属性或方法,JavaScript 就会沿着原型链向上查找,直到找到该属性或方法为止。
原型继承是通过将一个对象的原型设置为另一个对象来实现的。例如,我们可以创建一个 Animal 类型的对象,并将其原型设置为一个 Mammal 类型的对象,这样 Animal 对象就可以继承 Mammal 对象的属性和方法。
-- -------------------- ---- ------- -------- -------- - ------------- - ----- - ---------------- - - -------- ---------- - ------------------- --- --------- - -- -------- -------- - ------------- - ----- - ---------------- - --- --------- ----- --- - --- --------- -------------------------- -- ---- -------------- -- ------ --- ------
在上面的例子中,我们定义了一个 Mammal 类型的对象,并将其原型设置为一个包含 breathe 方法的对象。然后,我们定义了一个 Animal 类型的对象,并将其原型设置为 Mammal 对象。最后,我们创建了一个 Animal 对象,并检查了它是否具有 Mammal 对象的属性和方法。
class 继承
在 ES6 中,我们可以使用 class 关键字来定义类,这使得 JavaScript 的面向对象编程更加清晰和易于理解。class 继承是通过使用 extends 关键字来实现的,它允许一个类继承另一个类的属性和方法。
-- -------------------- ---- ------- ----- ------ - ------------- - ------------- - ----- - --------- - ------------------- --- --------- - - ----- ------ ------- ------ - ------------- - -------- ------------- - ----- - - ----- --- - --- --------- -------------------------- -- ---- -------------- -- ------ --- ------
在上面的例子中,我们定义了一个 Mammal 类和一个 Animal 类,并使用 extends 关键字将 Animal 类继承自 Mammal 类。Animal 类的构造函数调用了 super(),这会调用父类的构造函数,并将 this 对象传递给它。这样,我们就可以在 Animal 类中使用 Mammal 类的属性和方法。
总结
在 ECMAScript 2021 中,class 继承已经成为了主流,它使得 JavaScript 的面向对象编程更加清晰和易于理解。尽管原型继承仍然是一个重要的概念,但是使用 class 继承可以使代码更加简洁和易于维护。在编写 JavaScript 代码时,我们应该根据实际情况选择合适的继承方式。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6603be91d10417a2220392f5