前言
在 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