JavaScript 面向对象编程:ECMAScript 2021 中的类

在 JavaScript 中,面向对象编程(OOP)是一种常见的编程范型。在 ECMAScript 2021 中,类被引入作为一种更加强大且方便的面向对象编程方式。在本文中,我们将深入研究这个特性,包括如何使用它,以及它对您的代码的影响,以及如何构建类及其实例。

什么是类?

在 ECMAScript 2021 中,类是一组属性和方法的集合而被定义的模板。同样地,每个实例都共享这些属性和方法。类相当于一种容器或模板,用于为同类型的多个对象提供相同的特征。

创建类

类的创建过程与 JavaScript 中的函数相似。可以使用 class 关键字来定义类,并根据我们需要的属性和方法创建类定义。例如:

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

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

在上面的示例中,我们通过 class 关键字创建了 Person 类。此类包含一个构造函数来定义 firstNamelastName 属性,以及一个 greet() 方法来向用户打招呼。在创建了该类之后,可以使用 new 操作符来创建该类的实例,就像调用函数一样。

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

继承

在 ECMAScript 2021 中,类还支持继承,这意味着您可以创建一个子类来重用父类中的代码,并添加自己的属性和方法。要继承类,请使用 extends 关键字,并在子类中调用父类的构造函数。

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

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

在上面的示例中,我们创建了一个名为 Employee 的子类,并从 Person 父类继承了构造函数和 greet() 方法。此外,子类还定义了 position 属性和 introduce() 方法。请注意使用 super() 在子类构造函数中调用父类的构造函数,以便能够设置从父类继承的属性。

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

类静态方法

类还支持定义静态方法,这些方法不需要实例化即可调用。要定义静态方法,请在方法名称前添加 static 关键字。

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

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

在上面的示例中,我们定义了 Calculator 类并创建了两个静态方法:add()subtract()。这些方法可以使用类的名称来调用,无需创建类的实例。

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

结论

在 ECMAScript 2021 中,类是一种更强大且方便的面向对象编程方式。您可以使用类来创建对象模板,并使用继承来重用代码。在定义类时,您还可以使用静态方法来避免在不需要对象实例的情况下运行重要的逻辑。现在您已经学会了如何创建类和访问它们的属性和方法,因此尝试创建自己的类并使用它们来编写更结构化和可读性更强的代码吧!

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