介绍
在 ES6 中,我们可以通过 Symbol
类型来创建非字符串类型的属性和方法名称(或键),从而实现属性的私有化。相比于以往我们使用 _
开头的命名方式,使用 Symbol
可以更加优雅、安全地保障属性的私有性。
本文将介绍 Symbol
的基本用法,以及如何用 Symbol
实现属性私有化的方法,并提供示例代码进行演示。
Symbol 的基本用法
首先让我们来了解一下 Symbol
的基本用法。
创建 Symbol
要创建一个 Symbol
,只需要使用 Symbol
类型来声明即可:
const mySymbol = Symbol();
我们可以给 Symbol
传入一个描述字符串作为参数,来让该 Symbol
更有意义:
const mySymbol = Symbol('my symbol');
对于相同描述字符串的 Symbol
,每次创建的 Symbol
都是不同的,因此每个 Symbol
都是唯一的。
使用 Symbol
创建一个 Symbol
后,我们便可以将其作为对象的属性名(键)来使用。例如:
const mySymbol = Symbol('my symbol'); const obj = { [mySymbol]: 'my value', }; console.log(obj[mySymbol]); // 'my value'
注意,Symbol
类型虽然是基本数据类型,但它并不像字符串、数字等类型可以直接参与运算。因此,不能通过加减法等方式来比较、转换两个 Symbol
,只能使用 Symbol
本身提供的方法。
使用 Symbol 实现属性私有化
既然我们已经了解了 Symbol
的基本用法,我们可以开始谈论如何使用它来实现属性私有化。
基本实现方法
实现属性私有化的方法很简单,我们只需要使用 Symbol
创建一个私有属性标记,然后在对象的属性中使用该标记,就可以实现该属性的私有化了。例如:
-- -------------------- ---- ------- ----- --------------- - -------------------------- ----- ------- - ------------- - --------------------- - -- -- - ------- ---------- - -------------------- - ------ ---------------------- - ------------------------- - --------------------- - ------ - - ----- ------- - --- ---------- ------------------------------------------ -- -- -- - ------- --------- ------------------------------- -------- ------------------------------------------ -- ---- ------ -------------------------------------- -- ---------
在这个示例中,我们使用 Symbol
创建了一个 privateProperty
,用它来表示对象的私有属性。在对象的构造函数中,我们使用该标记创建了一个私有属性。在该对象的 getPrivateProperty
和 setPrivateProperty
方法中,我们使用同样的标记来获取和修改私有属性。
私有属性的命名
当我们使用 Symbol
来实现属性私有化时,我们通常会将其命名为以 _
开头的字符串,从而提醒其他开发者这个属性是私有的。例如:
-- -------------------- ---- ------- ----- ---------------- - ------------------------ --- ----- ------- - ------------- - ---------------------- - -- -- - ------- ---------- - --- ----------------- - ------ ----------------------- - --- ---------------------- - ---------------------- - ------ - - ----- ------- - --- ---------- ------------------------------------- -- -- -- - ------- --------- ----------------------- - ---- ------- ------------------------------------- -- ---- ------ --------------------------------------- -- ---------
在这个示例中,我们在 Symbol
的描述字符串前加上了一个 _
,表示这个属性是私有的。在实现 get
和 set
方法时,我们将私有属性名作为属性名使用。
私有属性的垃圾回收
使用 Symbol
创建的私有属性,在对象的其它地方不存在对它的引用时,该属性也会被垃圾回收。例如:
-- -------------------- ---- ------- ----- ------- - ------------- - ---------------------- - -- -- - ------- ---------- - --- ----------------- - ------ ----------------------- - --- ---------------------- - ---------------------- - ------ - - --- ------- - --- ---------- ------------------------------------- -- -- -- - ------- --------- ------- - ----- -- ---------
总结
使用 Symbol
可以创建唯一的属性名称,从而实现属性的私有化。我们可以通过一个 Symbol
值来表示一个属性,并且不会影响到其他的属性。使用 Symbol
实现属性私有化可以提高代码的可读性和可维护性。
希望本篇文章能够帮助读者更好地理解使用 Symbol
实现属性私有化的方法及其意义,实现更好的代码编写。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c726d310032fedd390a30e