如何在 ECMAScript 2016 中使用 class 类进行面向对象编程

随着 Web 应用程序日趋复杂,前端开发也变得越来越重要。在面对日益复杂的业务逻辑和功能实现时,面向对象编程(OO)将变得越来越必要。由于 JavaScript 是一种基于原型的编程语言,它对面向对象编程的支持不像其他语言那样直观。 但是,自 ECMAScript 2015 引入 Class 类以来,JavaScript programmers终于可以使用标准 OO 模式。

什么是 Class?

在 ES5 及之前的 JavaScript 中,我们使用函数来模拟类。虽然这种方式可以进行面向对象编程,但它并不像其他面向对象编程语言的类声明那样简单和易于阅读。

ES6 引入了 Class 类,它是一种定义类的新语法方式。从语法的角度来看,Class 类看起来更加正式。在语义层面,类具有更高的可读性和可维护性。

示例代码如下:

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

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

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

在代码示例中,类 User 包含名称和年龄属性,以及 sayHello 方法。User 通过在模板字符串中使用 $ {} 语法插入变量,能够更简单地格式化字符串和属性。

Class 继承

除了 Class 类的定义方式之外,Class 还提供了一种更具声明性和规范性的继承机制。在面向对象编程中,继承是一种常用技术,因为它允许我们从现有的代码中派生新代码,并共享相同的结构和语义。

示例代码如下:

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

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

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

在代码示例中,我们使用 extends 关键词来定义 Dog 类继承自 Animal 类。speak 方法的重写允许我们为 Dog 实现自定义行为。类似于继承的实现,我们可以通过 super 关键字访问父类的构造函数和方法。

Class Getters 和 Setters

Class 类具有 GettersSetters 特性,这允许我们更细粒度地控制属性访问。通常情况下,我们可以使用类似 get()set() 的方法来控制属性访问。这会显著提高代码的可读性和可维护性。

示例代码如下:

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

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

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

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

在代码示例中,我们使用 getset 关键字,将 email 属性封装为类中的属性。get 函数返回 _email 属性的子字符串。set 函数首先验证输入的电子邮件地址是否包含 @,如果有,则将 _email 属性设置为地址,否则输出错误消息。

Class 静态方法

Class 类还支持静态方法。静态方法可用于对类属性和方法的访问和更改。通常,静态方法用于在对象之间共享公共数据或操作,例如创建单例或其他共享功能。

示例代码如下:

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

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

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

在代码示例中,我们使用 static 关键字定义了 createGuest() 方法。此方法可在不创建对象的情况下创建用户对象,通常用于实现类似单例的设计模式。

结论

在本文中,我们了解了 Class 类在 JavaScript 中起到类似继承、Getter 和 Setter、及静态方法的作用。掌握这些概念和技巧确保我们能够获得更丰富和更高级别的编程体验。作为前端开发人员,在掌握和使用这些技术的过程中,我们可以更容易地开发出更高效、更可读、更可维护的代码。

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