在 ES11 中,JavaScript 如何通过公共和私有字段支持类的封装

阅读时长 5 分钟读完

在 ES11 (即 ES2020)中,JavaScript 为类的封装提供了新的特性:公共字段和私有字段。这两个特性的引入,能够帮助开发者更好地封装类的属性和方法,使得代码更易读、更易维护。

公共字段

公共字段指的是类的实例属性,可以在类中直接定义并初始化。这些属性是可访问的,可以直接从实例对象上访问,也可以通过类名直接访问。

下面是一个简单的示例,展示如何定义和使用公共字段:

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

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

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

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

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

由于公共字段是可访问的,因此它们比较适合用于存储类的实例属性。当需要直接从类的实例对象上访问某些属性时,可以使用公共字段。

私有字段

私有字段是指只能在类的内部访问的字段。这些字段使用 # 符号作为前缀来定义,表示该字段是类的私有成员。

下面是一个示例,展示如何定义和使用私有字段:

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

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

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

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

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

可以看到,外部无法访问私有字段,只有通过类的内部方法才能访问私有字段。这使得类的属性得到了更好的封装和保护,能够有效防止类的属性被误用或者修改。

深入理解公共和私有字段

在实际开发中,我们经常需要在类的内部定义一些私有变量或函数,这些变量和函数的作用范围仅限于类的内部。在 ES11 之前,我们通常会采用以下几种方式来实现:

  1. 将变量或函数名称前加上 _ (下划线),表示该变量或函数是私有的,不应该被外部访问;
  2. 在类的构造函数中定义变量或函数,以便它们可以使用 this 关键字来访问类的属性和函数;
  3. 使用闭包实现私有变量或函数。

这些方法在一定程度上能够实现类的封装,但却存在一些问题:

  • _ 前缀并非 JavaScript 语法规定的,它只是一种开发者自己的命名规范。因此,外部仍然可以访问这些变量或函数;
  • 在构造函数中定义私有变量或函数,会导致类的属性和函数的定义混杂在一起,代码不易理解和维护;
  • 使用闭包实现私有变量或函数,会导致代码冗长且不易阅读。

公共字段和私有字段的引入,能够帮助我们更好地解决这些问题。在 ES11 中,类的属性和方法都可以在类的内部直接定义,而不必使用 _ 前缀或者在构造函数中定义。私有字段可以保证类的属性和方法的访问范围仅限于类的内部,这使得类的封装变得更加严谨和可靠。

如何使用公共和私有字段

在使用公共和私有字段时,需要注意以下几点:

  1. 为了能够使用公共字段和私有字段,需要使用支持这些特性的 JavaScript 引擎,例如 Chrome 84+、Firefox 79+ 等。
  2. 建议在类的定义中,将公共字段定义在类的顶层,将私有字段定义在类的方法中。
  3. 私有字段可以被继承,但不能被覆盖。

以下是一个示例,演示如何在实际开发中使用公共和私有字段:

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

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

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

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

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

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

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

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

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

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

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

以上代码定义了一个 Animal 类,该类包含公共字段 species,公共方法 run() 和私有字段 name、私有方法 #walk()Cat 类继承了 Animal 类,重写了 speciesrun() 方法。通过这个示例,我们可以看到公共和私有字段如何被用在类的定义和方法的实现中。

结论

在 ES11 中,公共和私有字段为 JavaScript 类的封装提供了新的特性。开发者可以使用这些特性来更好地封装类的属性和方法,使得代码更易读、更易维护。在实际开发中,我们应该尽可能地使用公共和私有字段,以提高代码的可靠性和可维护性。

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

纠错
反馈