写在前面:
ECMAScript 是 JavaScript 的主要规范,它定义了 JavaScript 的语法和行为,并安排着 JavaScript 的可移植性。随着时代的推进和开发者对 JavaScript 的需求不断增加,ECMAScript 规范也在不断更新升级,2021 年发布的 ECMAScript2021 中新增了一些关于 Class 的新特性,包括 private 属性、static 方法和字段等。这些特性为开发者提供了更好的操作 Class 对象的能力,也使得处理继承和多态变得更加便捷。接下来我们将一步步介绍如何使用这些新特性。
1. Class 的基本使用
Class 是一种面向对象编程模式,可以用来描述一类对象的属性和方法。在 JavaScript 的 Class 中,使用 class 关键字定义 Class,然后定义其构造函数的属性和方法,如下所示:
-- -------------------- ---- ------- ----- ------ - ----------------- ---- - --------- - ----- -------- - ---- - ----- - ------------------ -------------- ----------- ----- - -
上述代码中,定义了一个 Animal 类,通过构造函数定义了它的 name 和 age 属性,以及一个 say 方法。调用 say 方法可以输出 Animal 的信息。
const cat = new Animal('Tom', 3); cat.say(); // 我的名字是 Tom,我 3 岁了
2. 继承
继承是面向对象编程的重要概念之一,它描述了一个子类继承父类的属性和方法,在 JavaScript 中 Class 也支持继承。继承是实现多态的前提,子类对象可以使用父类对象的方法,也可以重写它的方法。下面是一个继承的示例,Cat 类继承自 Animal 类:
-- -------------------- ---- ------- ----- --- ------- ------ - ----------------- ---- ------ - ----------- ----- ---------- - ------ - ----- - ------------------ -------------- ----------- -------- ---------------- - - ----- --- - --- ---------- -- --------- ---------- -- ----- ----- - -------- -----
上述代码中,定义了一个 Cat 类,通过 extends 关键字继承了 Animal 类,同时定义了一个 color 属性。在 Cat 类中,say 方法被重新实现,输出了 Cat 的信息。
3. 多态
多态是面向对象编程实现复杂系统的重要方法,它描述了不同的对象通过相同的接口来调用不同的方法。在 JavaScript 中实现多态,可以通过继承和重写方法来实现。接下来的示例演示了多态的使用:
-- -------------------- ---- ------- ----- --- ------- ------ - ----------------- ---- - ----------- ----- - ----- - ------------------------ -------------- ----------- ----- - - ----- --- ------- ------ - ----------------- ---- - ----------- ----- - ----- - ------------------------ -------------- ----------- ----- - - ----- --- - --- ---------- --- ----- --- - --- ----------- --- ----- ------- - ----- ----- ------------------------ -- - ------------- ---
上述代码中,定义了 Cat 和 Dog 两个类,它们都继承自 Animal 类,并重写了 say 方法。在程序中,我们创建了两个不同的对象 cat 和 dog,然后把它们放入了一个数组中,最后再遍历数组中的对象,调用其 say 方法。由于 cat 和 dog 拥有不同的 say 方法,所以遍历结果也不同。
4. Class 的新特性
在 ECMAScript2021 中,Class 新增了一些新特性,包括 private 属性、static 方法和字段等,在下面的示例中,我们来演示这些新特性。
4.1 private 属性
用 private 关键字在 Class 中定义一个私有属性或方法,它只能在 Class 内部访问。下面的示例中,我们定义了一个类 Person,它有一个私有属性 weight,只能通过调用 getWeight 方法来获取:
-- -------------------- ---- ------- ----- ------ - -------- ------------------- - ------------ - ------- - ----------- - ------ ------------- - -
4.2 static 方法和字段
在 Class 中,用 static 关键字声明一个静态方法或属性,它是 Class 自身拥有的方法或属性,不能在实例中使用。下面的示例中,我们定义了一个类 Circle,它有一个静态方法 calculateArea,和一个静态字段 PI:
class Circle { static PI = 3.14; static calculateArea(radius) { return this.PI * radius * radius; } }
结论
Class 是 JavaScript 中面向对象编程的一个核心特性,通过继承和重写方法可以实现多态。2021 年的 ECMAScript 对 Class 进行了改进,新增了一些新特性,使得 Class 更加强大和易用。开发者可以根据项目的需要,选择不同的面向对象编程方法,从而实现项目的需求。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66fa5e4644713626014bcd0f