如何充分发挥 ECMAScript 2021 中类的作用

如何充分发挥 ECMAScript 2021 中类的作用

ECMAScript 2021 中,类是一个新特性。类被设计用于让 JavaScript 开发者更容易地使用面向对象编程。来自其他编程语言的开发者也会非常愿意将其用于 JavaScript 项目中。这篇文章将着重讨论如何在项目中充分利用与实施 ES6 类的技术。

类的基础

类是 ECMAScript 2021 中的一项功能,可用于创建对象。它是 JavaScript 中一种新的数据类型。类由类名、属性和方法组成。使用类,开发者可以将相关的属性和方法组合在一起以创建一个对象实例。与 ES5 中原型一样,类也支持继承和多态性。

首先,需要注意的是类的定义方法非常简单:

----- ------- -
  -- ----
-

在 ES6 中,类定义不再需要构造函数,因为类及其成员默认所有方法都已经声明为类的原型成员。比如说,定义一个名为 Circle 的类,它拥有可以计算圆的面积和周长的方法,可以这样写:

----- ------ -
  ------------------- -
    ----------- - -------
  -
  
  --- ------ -
    ------ ------- - ----------- -- --
  -
  
  --- ----------- -
    ------ - - ------- - ------------
  -
-

在上面的代码中,我们定义了一个 Circle 类,它接收一个半径参数来构造一个 Circle 对象。然后,通过在 Circle 类的原型上定义 areaperimeter 方法来为 Circle 类对象提供计算圆的面积和周长的功能。

访问控制和封装

在类中,所有的属性和方法默认都是公开的,这意味着它们在对象实例和子类中都可以进行访问和修改。但是,在某些情况下,您可能希望限制对类的访问,这就需要借助封装实现访问控制。

在 JavaScript 中,访问控制可以通过使用私有或受保护成员来实现。私有成员只能在类内部访问,而受保护成员可以在类及其子类内部访问。

要将属性或方法设置为私有,您可以使用以下命名约定:

----- ------- -
  ------
  -------

  ----------------- ------ -
    ---------- - -----
    ----------- - ------
  -

  ------- -
    ------------------ -------------- ------ -----------------
  -
-

在上面的示例中,我们将 nameemail 属性设置为私有成员。使用 # 符号将属性名称放在类内部时,即表示这些属性是私有的。所以在调用 class.print() 方法的时候,nameemail 属性只能在 Student 类本身内部访问。

要将属性或方法设置为受保护成员,按照以下命名约定:

----- ------ -
  ------
  -----

  ----------------- ---- -
    ---------- - -----
    --------- - ----
  -

  --- ----- -
    ------ ----------
  -

  --- -------- -
    -- ---- - - -- --- - ---- -
      ----- --- -------------- ------
    -
    --------- - ----
  -
-

在上面的示例中,我们将 nameage 属性设置为受保护成员。使用 _ 符号将属性名称放在类内部时,即表示这些属性受保护。在 Person 类内部,可以访问这些属性和方法。在受到继承的类中,可以访问这些属性和方法。

继承

在类的继承方面,类也是 ECMAScript 2021 中新添加的特性。与 ES6 中的继承类似,ES6 类的继承也是通过 extends 关键字实现的,如下所示:

----- ------ -
  ----------------- -
    ---------- - -----
  -

  ------- -
    -------------------------- ----- - ---------
  -
-

----- --- ------- ------ -
  ----------------- -
    ------------
  -

  ------- -
    -------------------------- ---------
  -
-

在上面的示例中,我们定义了一个基类 Animal 和一个继承于 Animal 的子类 Dog。在子类 Dog 中,我们使用了 super 关键字来调用父类 Animal 的构造方法,并在子类的构造函数中初始化了 name 属性。然后,我们覆盖了 Animal 类的 speak 方法,以定义更适合 Dogspeak 行为。

类也可以实现继承的扩展,从而添加新的行为。这可通过在子类上定义新的方法或属性来完成。例如,对于 Dog 类,可以添加一个新的方法 run

----- --- ------- ------ -
  ----------------- -
    ------------
  -

  ------- -
    -------------------------- ---------
  -

  ----- -
    -------------------------- --------
  -
-

在上面的代码中,我们添加了一个 run() 方法。这个新的方法被 Dog 类所拥有,但它是通过从 Animal 类继承而来的。

多态性

多态性是指同样的方法可以在不同的对象上执行,并产生不同的结果。通过多态性,通过使用不同的子类来扩展基类,可以轻松地扩展一个系统。

在 ES6 类中,多态性是通过继承和方法覆盖来实现的。当子类要覆盖方法时,它可以调用父类的方法。例如,在下面的代码中,为覆盖 speak() 方法,Cat 类使用了 super.speak() 方法来调用父类的 speak() 方法:

----- --- ------- ------ -
  ----------------- -
    ------------
  -

  ------- -
    -------------------------- ---------
    --------------
  -
-

在上面的代码中,我们定义了一个名为 Cat 的子类,其中的 speak() 方法调用了父类的 speak() 方法,并在 console.log() 表达式中添加新的词。这就产生了多态行为。

结论

ECMAScript 2021 中添加的类是 JavaScript 的一个新特性,直接实现了面向对象编程的语言设计原则。本文讨论了 ES6 类的实现方法,以及如何利用类的特性来创建具有封装、继承和多态的面向对象体系结构。当然,类的应用还可以有很多其他的实现方式和实践,程序员们可以通过在项目中实现具体类和相关方法来探索其更深层次的功能和应用。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/670dd3ff5f551281025e8cfa