在编写 JavaScript 代码时,我们通常需要定义对象的属性和方法,以便实现所需的功能。然而,有时我们希望某些属性和方法不被外部访问,以保护对象的内部状态和实现细节。在 ES11 中,新增了 “私有字段”(Private Fields)的概念,可以帮助我们实现这一目标。
什么是私有字段?
私有字段是指只能在类的内部访问的字段,外部代码无法直接读取或修改。在 ES11 中,私有字段使用 # 符号定义,例如:
-- -------------------- ---- ------- ----- ------ - ------ ----------------- - ---------- - ----- - --------- - ------ ----------- - -展开代码
在上面的代码中,我们定义了一个名为 #name 的私有字段,它只能在 Person 类的内部访问。构造函数接受一个参数 name,并将其赋值给 #name。getName 方法可以访问 #name 并返回其值。
如何使用私有字段?
使用私有字段的方式与使用普通字段类似,只是需要在字段名前加上 # 符号。在类的内部,可以直接访问和修改私有字段的值。在类的外部,私有字段无法被直接访问和修改,但可以通过公共方法来间接访问和修改私有字段的值。
const person = new Person('Alice'); console.log(person.getName()); // 'Alice' console.log(person.#name); // SyntaxError: Private field '#name' must be declared in an enclosing class person.#name = 'Bob'; // SyntaxError: Private field '#name' must be declared in an enclosing class
在上面的代码中,我们创建了一个 Person 对象,并调用其 getName 方法来访问私有字段 #name 的值。在尝试直接访问或修改 #name 时,会抛出 SyntaxError 错误。
为什么要使用私有字段?
使用私有字段可以帮助我们隐藏对象的内部状态和实现细节,从而提高代码的安全性和可维护性。私有字段可以防止外部代码对对象的状态进行不合理的修改,从而避免出现意外的错误和行为。
此外,私有字段也可以帮助我们更好地封装代码,使其更易于理解和维护。私有字段可以隐藏对象的实现细节,从而使代码更加简洁和易于阅读。
示例代码
下面是一个使用私有字段的示例代码,它实现了一个简单的计数器类,可以记录计数器的当前值和最大值,并提供增加和减少计数器值的方法。其中,当前值和最大值都是私有字段,只能在类的内部访问。
-- -------------------- ---- ------- ----- ------- - ------- ---------- --------------------- - ----------- - -- -------------- - --------- - ---------- - -- ------------ - --------------- - -------------- - - ---------- - -- ------------ - -- - -------------- - - ---------- - ------ ------------ - -展开代码
在上面的代码中,我们定义了一个名为 Counter 的类,它有两个私有字段 #value 和 #maxValue,分别表示计数器的当前值和最大值。构造函数接受一个参数 maxValue,用于初始化 #maxValue 的值。increase 和 decrease 方法分别用于增加和减少计数器的值,但在达到最大值或最小值时不会继续增加或减少。getValue 方法用于访问 #value 的值。
使用该类的示例代码如下:
-- -------------------- ---- ------- ----- ------- - --- ------------ -------------------------------- -- - ------------------- -------------------------------- -- - ------------------- -------------------------------- -- - ------------------- -------------------------------- -- - ------------------- -------------------------------- -- - ------------------- -------------------------------- -- -展开代码
在上面的代码中,我们创建了一个 Counter 对象,并使用其 increase 和 decrease 方法来增加和减少计数器的值。由于 #value 和 #maxValue 是私有字段,外部代码无法直接访问和修改它们的值,从而保证了计数器的正确性和安全性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d5650fa941bf7134a0ad1b