ECMAScript 2021:在类中使用名为 #field 的本地私有字段
JavaScript 是一种动态语言,其语言特性让开发者可以为对象动态地添加或修改属性值,这使得 JavaScript 中的面向对象编程(OOP)有时会变得有点混乱。
为了解决这个问题,ECMAScript 2021 (也叫 ES2021 或 ES12)中引入了一种新特性:在类中使用名为 #field 的本地私有字段。
这个新特性为开发者提供了一种安全、可靠、私有的数据存储方法,同时也让 OOP 更加规范化和易于维护。
#field 语法
在类中声明一个私有字段,只需在字段名称前加上 # 即可,比如:
class Example {
#myPrivateField = "private value";
}类似此例,#field 在类中的作用域仅限于该类,请注意,它并不影响类继承中的私有属性和方法。
注意:#不能放在实例属性中,也更不能作为全局变量使用。
#field 与 this 的区别
在上面的代码中,我们看到一个类 Example 中声明了一个私有属性 #myPrivateField。在实例化 Example 类之后,您仍然可以在该实例上设置和访问字段的值,比如:
const myExample = new Example(); console.log(myExample.#myPrivateField); // Uncaught SyntaxError: Private field '#myPrivateField' must be declared in an enclosing class
上述代码将报错:私有字段 '#myPrivateField' 必须在封闭类中声明。
正确的方式是:使用一个 getter 和 setter 来访问由前述字段在类中定义的变量。如:
// www.javascriptcn.com code example
class Example {
#myPrivateField = "hidden value";
get myPrivateField() {
return this.#myPrivateField;
}
set myPrivateField(newValue) {
this.#myPrivateField = newValue;
}
}
const myExample = new Example();
console.log(myExample.myPrivateField); // "hidden value"
myExample.myPrivateField = "new value";
console.log(myExample.myPrivateField); // "new value"从上面的代码中,我们可以看到实例用“存取器属性”(getter 和 setter)来获取和获取私有变量的信息。
这样以来,JavaScript 中的类与其他面向对象语言中的类一样,现在有了私有变量的支持。
如何使用 #field
首先,请确保您需要类中的私有属性。
私有属性实际上可以完成许多任务,例如:
- 存储类的私有数据
- 通过私有属性来实现类似抽象类的行为,等等。
下面是一个基本的示例,我们将一个具有私有字段的类实例化,然后使用 privateField 存储新值。
// www.javascriptcn.com code example
class Example {
#myPrivateField = "hidden value";
get myPrivateField() {
return this.#myPrivateField;
}
set myPrivateField(newValue) {
this.#myPrivateField = newValue;
}
}
const myExample = new Example();
console.log(myExample.myPrivateField); // "hidden value"
myExample.myPrivateField = "new value";
console.log(myExample.myPrivateField); // "new value"#field 的指导意义
使用 ECMA Script 最新2021 的 #field 私有变量功能,您可以通过私有变量的概念来定义元素,从而在代码中创建更结构化的形式,同时又可以确保代码中的数据安全性。
使用私有变量作为代码中重要的数据成分,使用者将具有更好的控制,可以确保构建更坚固的代码。
这种新功能的集成将促进许多开发项目,因为开发者现在可以使用 OOP 的一些重要工具,例如:封装、继承、多态等等。
此外,# field 是一项强大而有用的技术,因为它可以显着地提高代码的可读性和可维护性。
结语
在此技术指南中,我们介绍了 ECMAScript 2021 中的新特性 #field。我们探讨了其意义,如何正确地定义私有变量属性,以及如何使用它来创建结构化形式的代码。
希望这篇文章能帮助您学习和了解 JavaScript 中的 OOP,也希望能为您的开发工作带来更大的好处。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d6659ea941bf7134c238f7