ES6 中的 Class 类及继承的实战应用

阅读时长 6 分钟读完

前言

在 JavaScript 中实现面向对象编程一直是一件棘手的问题,我们可以通过函数来模拟类,但是其表达能力并不尽如人意,尤其是在继承过程中表现得更是疲软不堪。ES6 为我们带来了 class 关键字,而这个关键字提供了类与继承这两个概念,使得我们可以更好地去实现面向对象编程。

Class 类的基本语法

以下是 class 声明类的基本语法:

-- -------------------- ---- -------
----- ------- -
  ----------------- -
    --------- - -----
  -
  -- ----- --
  ---------- -
    -- ----
  -
-
展开代码
  • class 关键字声明一个类,后面跟着类名,这里的 MyClass 是一个标识符,代表这个类的名称。
  • 类内部使用 constructor 方法,通过 new 关键字来创建对象时,会自动调用这个方法,用于初始化对象。
  • this 关键字代表 Class 实例对象。

除了 constructor 方法外,我们还可以声明其他的方法,这些方法可以被所有的 Class 实例对象共享。

继承

在面向对象编程中,常常会使用继承来实现代码的复用和封装。ES6 的 class 中也提供了继承的语法,我们可以很方便地去实现一个子类来扩展其父类的功能。子类可以使用 extends 关键字来继承父类的所有属性和方法,并且可以覆盖方法,增加新的方法。

以下是一个继承的示例代码:

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

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

----- ----- - --- ---------- ------- -----------
----------------------------- -- -- ---- -- ---
------------------------------ -- - -- - ------ ---------
展开代码
  • 子类必须在 constructor 方法中调用 super() 方法,否则会报错,因为子类需要继承父类的所有属性。
  • 在子类中使用 super 关键字来调用父类的方法,以实现对父类的继承。

实战应用

下面我们将结合一个实际场景来展示 class 类与继承的应用。假设我们要开发一个餐厅点餐系统,该系统需要提供以下功能:

  • 菜单的展示和添加新菜品。
  • 客户端和服务员之间的即时通讯。
  • 后厨人员对订单的查看和处理。

其中,我们可以使用 class 来模拟餐厅中的各个角色。

菜单类 Menu

-- -------------------- ---- -------
----- ---- -
  ------------- -
    ---------- - ---
  -
  ------------- -
    ----------------------
  -
  ---------- -
    ------ -----------
  -
-
展开代码
  • addItem() 方法用于添加新菜品到菜单中。
  • getItems() 方法用于获取菜单中的所有菜品。

客户端类 Client

-- -------------------- ---- -------
----- ------ -
  ----------------- -
    --------- - -----
  -
  -------------- -
    ----------------------------------
    ----- ----- - ----------------
    ------------------ -- -------------------
  -
  ----------- -
    ----- ----- - ----------------
    ----- ----- - ---
    ------------------ -- --------------------------------------------
    -----------------------------------------------------
  -
-
展开代码
  • showMenu() 方法用于展示菜单。
  • order() 方法用于点餐。

服务员类 Waiter

-- -------------------- ---- -------
----- ------ -
  ----------------- -
    --------- - -----
  -
  ----------------- -
    ------------------------------------------------
    -------------------
  -
  -------------------- ------ -
    ----------------------------------------------------------------------
  -
-
展开代码
  • takeOrder() 方法用于让服务员为客户点单。
  • notifyClient() 方法用于提醒客户已下单。

后厨人员类 Cook

-- -------------------- ---- -------
----- ---- -
  ----------------- -
    --------- - -----
  -
  ----------------- -
    --------------------------------------------------------
  -
  ------------------ -
    ---------------------------------------------------------
  -
  ---------------- -
    ---------------------------------------------------------
  -
-
展开代码
  • checkOrder() 方法用于查看订单。
  • handleOrder() 方法用于接收订单并将其分配给工作人员。
  • doneOrder() 方法用于标记订单已完成并准备等待上菜。

订单类 Order

-- -------------------- ---- -------
----- ----- -
  ------------------- ------ -
    ----------- - -------
    ---------- - ------
    ----------- - ----------
  -
  ----------- -
    ------ ------------
  -
  ----------------- -
    ----------- - -------
  -
-
展开代码
  • getStatus() 方法用于获取订单状态。
  • setStatus() 方法用于设置订单状态。

结语

通过以上的实战应用,我们了解了如何使用 class 进行面向对象编程,在实际工程中,我们可以根据类的不同作用将其封装为不同的模块,使得代码更加清晰易读。同时,继承的概念也让我们可以更好地复用和扩展代码。

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

纠错
反馈

纠错反馈

程序员教程

精选优质教程,助你快速提升技术实力

程序员面试题库

海量优质面试题,助你轻松应对技术面试