ES6 中如何使用 Symbol 实现属性私有化

阅读时长 6 分钟读完

介绍

在 ES6 中,我们可以通过 Symbol 类型来创建非字符串类型的属性和方法名称(或键),从而实现属性的私有化。相比于以往我们使用 _ 开头的命名方式,使用 Symbol 可以更加优雅、安全地保障属性的私有性。

本文将介绍 Symbol 的基本用法,以及如何用 Symbol 实现属性私有化的方法,并提供示例代码进行演示。

Symbol 的基本用法

首先让我们来了解一下 Symbol 的基本用法。

创建 Symbol

要创建一个 Symbol,只需要使用 Symbol 类型来声明即可:

我们可以给 Symbol 传入一个描述字符串作为参数,来让该 Symbol 更有意义:

对于相同描述字符串的 Symbol,每次创建的 Symbol 都是不同的,因此每个 Symbol 都是唯一的。

使用 Symbol

创建一个 Symbol 后,我们便可以将其作为对象的属性名(键)来使用。例如:

注意,Symbol 类型虽然是基本数据类型,但它并不像字符串、数字等类型可以直接参与运算。因此,不能通过加减法等方式来比较、转换两个 Symbol,只能使用 Symbol 本身提供的方法。

使用 Symbol 实现属性私有化

既然我们已经了解了 Symbol 的基本用法,我们可以开始谈论如何使用它来实现属性私有化。

基本实现方法

实现属性私有化的方法很简单,我们只需要使用 Symbol 创建一个私有属性标记,然后在对象的属性中使用该标记,就可以实现该属性的私有化了。例如:

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

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

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

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

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

在这个示例中,我们使用 Symbol 创建了一个 privateProperty,用它来表示对象的私有属性。在对象的构造函数中,我们使用该标记创建了一个私有属性。在该对象的 getPrivatePropertysetPrivateProperty 方法中,我们使用同样的标记来获取和修改私有属性。

私有属性的命名

当我们使用 Symbol 来实现属性私有化时,我们通常会将其命名为以 _ 开头的字符串,从而提醒其他开发者这个属性是私有的。例如:

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

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

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

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

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

在这个示例中,我们在 Symbol 的描述字符串前加上了一个 _,表示这个属性是私有的。在实现 getset 方法时,我们将私有属性名作为属性名使用。

私有属性的垃圾回收

使用 Symbol 创建的私有属性,在对象的其它地方不存在对它的引用时,该属性也会被垃圾回收。例如:

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

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

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

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

总结

使用 Symbol 可以创建唯一的属性名称,从而实现属性的私有化。我们可以通过一个 Symbol 值来表示一个属性,并且不会影响到其他的属性。使用 Symbol 实现属性私有化可以提高代码的可读性和可维护性。

希望本篇文章能够帮助读者更好地理解使用 Symbol 实现属性私有化的方法及其意义,实现更好的代码编写。

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

纠错
反馈