使用 ES9 实现 JavaScript 中的面向对象编程

阅读时长 6 分钟读完

自从 JavaScript 开始被用于开发 Web 应用以来,它已经成为了一种非常受欢迎的编程语言。JavaScript 传统上是一种基于对象原型的编程语言。但是在早期,JavaScript 中的对象编程相对比较复杂,很多开发者不得不采用其他方式来达成同样的效果。

随着新的 ECMA Script 标准的发布,现在可以使用 ES9 弥补 JavaScript 面向对象编程的缺陷。本文将详细讨论如何使用 ES9 实现 JavaScript 中的面向对象编程,以及如何使用它为应用程序添加更高级别的功能。

ES9 中的对象语法

ES9 想要改善 JavaScript 面向对象编程体验的主要方法之一,是通过提供一种更简单的对象语法。新的对象语法使得在 JavaScript 中创建面向对象的代码更加直观易懂,并且和其他编程语言的风格非常类似。

在 ES9 中,可以使用对象字面量语法新增一些特性。这些特性包括类、方法、成员变量和继承等。以下是一个简单的例子:

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

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

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

如上所示,在这个例子中,我们创建了一个 Animal 类并在其内部定义了一个 speak() 方法。随后我们又创建了一个名为 Dog 的子类,重写了 speak() 方法,并在其中添加了一些针对狗的行为。最后,我们实例化了一个 Dog 对象 d 并调用了它的 speak() 方法。

ES9 中的私有成员变量和方法

在过去,JavaScript 中的类成员变量和方法都是公共的。然而,在 ES9 中,可以为 JavaScript 类添加私有属性和方法。这意味着只有类内部的代码可以访问这些成员变量和方法,其他的代码则不能访问。

以下是一个具有私有成员变量和方法的 Animal 类的示例:

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

如上所示,在这个例子中,我们把 _name_age 字段定义为私有字段。这使得在类外部无法直接修改它们的值。我们同样定义了一个私有方法 #incrementAge(),它可以为 _age 属性递增一个值。

我们同样定义了一个 speak() 方法,它可以被公共地调用,并且它使用了类中定义的 _name_age 属性来输出 Animal 对象的信息。

最后,我们定义了一个公共的 haveBirthday() 方法,它会调用私有方法 #incrementAge() 来增加 Animal 对象的年龄。

ES9 中的继承

除了以前在 JavaScript 中使用的原型链继承模式之外,ES9 还提供了一种更简单的继承方法:类继承。

在类继承中,子类从父类继承方法和属性,这种继承方式更加清晰和易懂。

以下是一个可重用的电子设备类及其子类的示例代码:

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

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

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

如上所示,在这个例子中,我们首先定义了一个名为 Electronics 的类,它包含了一些与电子设备有关的基础信息,如电源状态、开关机等。

随后我们又定义了一个名为 Television 的子类,它通过 extends 关键字继承了 Electronics 类中的所有属性和方法。

最后,我们实例化了一个 Television 对象 tv,并调用了它的 getPowerStatus()turnOn()changeChannel() 方法。

结论

使用 ES9 实现 JavaScript 中的面向对象编程会让代码更加直观易懂,比许多其他原型继承的方式都要优化。本文介绍了如何使用 ES9 中的对象语法、私有成员变量和方法以及继承等各种特性来实现 JavaScript 中更高级别的面向对象编程。

这样做的好处之一是可以提高代码的可重用性,并且快速地创建一些结构化的代码库。

如果你是一个 JavaScript 开发者,并且打算使用面向对象编程来解决应用程序中的问题,那么使用 ES9 的类继承和其他面向对象编程的特性将是一件非常有益的事情。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67750edc6d66e0f9aaf35298

纠错
反馈