ES10 中引入了 Private Class Fields 和 Private Methods 这两个新功能,它们可以帮助开发人员更好地封装和保护类的内部状态和行为。本文将介绍如何使用这两个功能,包括如何定义私有属性和方法、如何调用私有属性和方法,以及它们的使用场景。
定义私有属性和方法
在 ES10 中,可以使用 # 符号来定义私有属性和方法。私有属性和方法只能在类的内部访问,外部无法访问。
class Person { #name; #age; constructor(name, age) { this.#name = name; this.#age = age; } #getInfo() { return `${this.#name} is ${this.#age} years old.`; } sayInfo() { console.log(this.#getInfo()); } } const person = new Person("John", 20); person.sayInfo(); // 输出 "John is 20 years old." console.log(person.#name); // 报错,无法访问私有属性 console.log(person.#getInfo()); // 报错,无法访问私有方法
在上面的代码中,我们使用 # 符号定义了两个私有属性 #name 和 #age,以及一个私有方法 #getInfo。在构造函数中,我们使用 this.#name 和 this.#age 来访问私有属性。在 sayInfo 方法中,我们调用了私有方法 #getInfo。
调用私有属性和方法
在类的内部,可以直接访问私有属性和方法。在类的外部,无法直接访问私有属性和方法,但可以通过公有方法来访问私有属性和方法。
class Person { #name; #age; constructor(name, age) { this.#name = name; this.#age = age; } #getInfo() { return `${this.#name} is ${this.#age} years old.`; } sayInfo() { console.log(this.#getInfo()); } getName() { return this.#name; } getAge() { return this.#age; } } const person = new Person("John", 20); person.sayInfo(); // 输出 "John is 20 years old." console.log(person.getName()); // 输出 "John" console.log(person.getAge()); // 输出 20
在上面的代码中,我们定义了两个公有方法 getName 和 getAge,它们分别返回私有属性 #name 和 #age 的值。在类的外部,我们可以通过这两个公有方法来访问私有属性 #name 和 #age。
使用场景
Private Class Fields 和 Private Methods 可以帮助开发人员更好地封装和保护类的内部状态和行为,从而提高代码的安全性和可维护性。以下是一些使用场景:
- 封装类的内部状态和行为,避免外部直接访问和修改类的属性和方法,从而提高代码的安全性和可维护性。
- 在继承中,私有属性和方法只能在父类中访问,子类无法继承或重写私有属性和方法,从而避免子类破坏父类的封装性。
- 在模块化开发中,私有属性和方法只能在当前模块中访问,避免外部模块直接访问和修改当前模块的属性和方法,从而提高代码的安全性和可维护性。
总结
Private Class Fields 和 Private Methods 是 ES10 中新增的两个功能,它们可以帮助开发人员更好地封装和保护类的内部状态和行为。在定义私有属性和方法时,需要使用 # 符号来标识。在调用私有属性和方法时,可以通过公有方法来访问私有属性和方法。私有属性和方法的使用场景包括封装类的内部状态和行为、继承中的保护和模块化开发中的封装。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65bbaeb9add4f0e0ff4848c5