JavaScript ES6:如何使用 “类” 的概念

阅读时长 10 分钟读完

在 ES6 中,我们可以使用“类”的概念来构建对象和实例化。这为 JavaScript 带来了新的面向对象编程范式,并使代码更具可读性和可扩展性。在本文中,我们将深入了解“类”的概念及其在 JavaScript 中的使用方法,并通过示例代码和实际应用场景来介绍如何使用“类”来改善代码结构和组织。

什么是类?

类是一种追求封装性和抽象性的程序设计思想。它将数据和相关的行为组合成一个单一的实体,使得我们可以通过该实体来对数据进行操作和修改,并且能够隐藏数据和行为的细节,将其暴露出来的接口简单易懂。

类与对象、实例的关系如下:

  • 类(class)是一个模板,用于描述某类对象的基本特征和行为;
  • 对象(object)是类的一个具体实例,它包含了类定义的属性和方法;
  • 实例化(instantiation)是创建对象的过程,通过类来创建实例。

如何使用类?

在 JavaScript 中,我们可以通过 class 关键字来定义一个类。下面是一个简单的例子:

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

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

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

在上面的例子中,我们定义了一个 Person 类,并在其中包含了两个属性 name 和 age,以及一个方法 sayHello。构造函数 constructor 用于初始化对象的属性,而方法 sayHello 用于输出对象的信息。通过 new 关键字来实例化一个 Person 对象 john,并调用它的方法 sayHello。

类的继承

在实际应用中,我们经常需要在基础类的基础上创建一个更具体的类。这时候继承就可以派上用场了。在 JavaScript 中,我们通过 extends 关键字来实现继承。下面是一个例子:

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

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

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

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

在上面的例子中,我们定义了一个 Animal 类,其中包含了一个 speak 方法。然后我们定义了一个 Dog 类,通过 extends 关键字继承 Animal 类,并重载了其 speak 方法。最后我们实例化一个 Dog 对象 spot,并调用它的方法 speak。注意到当我们调用实例的 speak 方法时,实际上执行的是 Dog 类中的方法,而不是 Animal 类中的方法。

类的访问限制

在类的定义中,我们可以使用一些关键字来对类的属性和方法进行访问限制。这样可以在一定程度上保证类的安全性和代码的可维护性。在 ES6 中,我们可以通过如下关键字来实现访问限制:

  • public:默认的访问修饰符,表示该属性或方法可以被类的外部访问;
  • private:表示该属性或方法只能在类内部访问;
  • protected:表示该属性或方法可以在类内部访问和继承的派生类中访问。

下面是一个例子:

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

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

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

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

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

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

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

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

在上面的例子中,我们定义了一个 Person 类,其中包含了两个私有属性 name 和 age,以及一个私有方法 #sayHello 和一个公有方法 sayHello。在访问属性时,我们使用了 get 和 set 方法来对属性进行访问限制。当对 age 属性赋值时,我们可以对其进行检查,如果值不合法则抛出异常。在调用 john.#sayHello() 方法时,由于该方法是私有的,因此会抛出一个错误。

类的静态方法和属性

在类的定义中,我们可以使用 static 关键字来定义一个静态方法或属性。静态方法和属性不需要实例化就可以直接访问,我们可以通过类名来引用它们。下面是一个例子:

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

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

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

在上面的例子中,我们定义了一个 Circle 类,并在其中定义了一个静态属性 PI 和一个静态方法 getDiameter。在访问静态属性和调用静态方法时,我们直接使用类名 Circle 来引用它们。

类的应用实例

在实际应用中,我们可以使用类的概念来改善代码结构和组织。下面是一个例子:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

在上面的例子中,我们定义了一个 Todo 类和一个 TodoList 类。其中 Todo 类包含了任务的一些基本属性和行为,如标题、描述、截止日期、优先级等。TodoList 类则包含了多个 Todo 对象,并提供了一些对 Todo 对象的统一管理方法,如添加、删除、完成、排序等。通过类的封装和抽象性,我们可以方便地对 Todo 对象进行管理和操作,使得代码更具可读性和可维护性。

总结

在本文中,我们详细介绍了 JavaScript 中类的概念以及如何使用类的概念来改善代码结构和组织。类提供了一种封装性和抽象性更高的程序设计思想,使得代码更具可读性和可维护性。通过使用类的继承、访问限制、静态方法和属性等特性,我们可以更加方便地管理和操作对象,并可以便捷地实现代码复用和扩展。

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

纠错
反馈