ES9 之设置属性修改不可见性

阅读时长 3 分钟读完

在 JavaScript 中,我们可以通过给对象添加属性来存储数据和状态,这些属性可以被读取、修改、删除等。但有时候,我们希望一些属性不被外部访问、修改,这时候就需要使用一些技巧来设置属性的不可见性。ES9 引入了一些新特性,使得设置属性不可见性变得更加方便。

使用 Symbol 类型

Symbol 类型是 ES6 中引入的一种新类型,它的主要作用是用来创建唯一的标识符,可以用作对象的属性名。在 ES9 中,我们可以使用 Symbol 类型来创建一个不可见的属性。

示例代码:

在上面的示例中,我们给 obj 添加了两个属性,一个是可见的属性 visible,另一个是不可见的属性 invisible。使用 Symbol('invisible') 创建的属性名是唯一的,不同的 Symbol 值创建的属性名也是不同的,因此在访问时需要使用相同的 Symbol 值。

使用 WeakMap 类型

WeakMap 类型也是 ES6 中引入的一种新类型,它是一种弱引用的映射表,可以用来存储对象和对象之间的关系。在 ES9 中,我们可以使用 WeakMap 类型来存储不可见的属性。

示例代码:

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

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

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

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

在上面的示例中,我们使用 WeakMap 类型来存储不可见的属性,将属性和对象之间的关系存储在了 WeakMap 中。在 MyClass 的构造函数中,我们使用 wm.set(this, { invisible: 'invisible' }) 将不可见的属性 invisibleMyClass 对象关联起来,然后可以在 getInvisible 方法中通过 wm.get(this) 获取该属性的值。

总结

在 JavaScript 中,设置属性的不可见性可以使用 Symbol 类型或 WeakMap 类型来实现。使用 Symbol 类型创建的属性名是唯一的,使用 WeakMap 类型存储的属性是与对象关联的。这些新特性使得设置属性不可见性变得更加方便,可以更好地保护对象的数据和状态,提高代码的安全性和可维护性。

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

纠错
反馈