ECMAScript 2021 (ES12) 中的对象私有方法和属性

阅读时长 5 分钟读完

在 ECMAScript 2021 中,我们可以使用 Symbol 和 WeakMap 等方式来在对象中定义私有的方法和属性,这样可以避免对象在外部被意外地修改和调用。本文将详细介绍如何定义私有的方法和属性,并提供一些示例代码和指导意义。

定义对象的私有方法

使用 Symbol 来定义私有方法是一种常用的方式。Symbol 是 ES6 中新增的一种原始数据类型,它可以用来定义一个唯一的标识符。我们可以使用 Symbol 来实现类似于私有方法或属性的功能,这样可以避免这些方法或属性被外部访问。

示例代码:

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

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

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

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

在上面的示例代码中,我们使用 Symbol 来定义了一个私有方法 _privateMethod,并在类中使用了该私有方法,在调用 callPrivateMethod 方法时可以调用到。注意,我们不能直接访问这个私有方法,如果尝试访问对象的另一个私有方法 _privateMethod,会抛出 TypeError。

定义对象的私有属性

与私有方法类似,使用 Symbol 来定义私有属性也是一种常用的方式。示例代码:

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

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

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

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

在上面的示例代码中,我们使用 Symbol 来定义了一个私有属性 _privateProperty,在 MyClass 的构造函数中初始化了这个属性。我们也可以定义 getter 和 setter 方法来操作这个私有属性,这样就可以在外部使用 myObject.privateProperty 访问到这个私有属性了。

使用 WeakMap 来定义私有属性

除了使用 Symbol 来定义私有属性以外,我们还可以使用 WeakMap 来实现类似的效果。WeakMap 是 ES6 新增的一种数据类型,它是一种弱引用的键值对集合,可以用来储存对象的私有属性。

示例代码:

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

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

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

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

在上面的示例代码中,我们使用 WeakMap 来定义了一个私有属性 privateProperties,并在 MyClass 的构造函数中创建了一个键值对,将 myObject 和一个对象 {privateProperty: "I am a private property"} 绑定在一起。通过 privateProperties.get(this) 可以获取当前对象的私有属性对象,进而获取到私有属性 privateProperty 的值。

总结

在 ECMAScript 2021 中,我们可以使用 Symbol 和 WeakMap 等方式来在对象中定义私有的方法和属性,这样可以避免对象在外部被意外地修改和调用。使用 Symbol 和 WeakMap 分别有各自的优缺点,需要根据实际情况来选择合适的方式。这种方式能够使我们写出更加安全、可靠的代码。

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

纠错
反馈