ES6 中引入了 class 关键字,使得面向对象编程更加方便。而在 ES10 中,又引入了一些新的特性,例如 private 和 static 成员,以及 class 中的 constructor 问题等。本文将介绍这些问题的解决方法,以及一些注意事项。
private 和 static 成员
在 ES10 中,class 中的成员可以被声明为 private 或 static。private 成员只能在 class 内部访问,而 static 成员则是类级别的,可以通过类名访问。下面是一个示例:
// javascriptcn.com 代码示例 class Person { #name; // private 成员 static #count = 0; // static 成员 constructor(name) { this.#name = name; Person.#count++; } getName() { return this.#name; } static getCount() { return Person.#count; } } const p1 = new Person("Alice"); console.log(p1.getName()); // 输出 "Alice" console.log(Person.getCount()); // 输出 1
需要注意的是,private 和 static 成员都需要在成员名称前加上 # 或 static 关键字。另外,private 成员只能在 class 内部访问,因此无法通过实例对象访问,需要提供一个公共方法来访问。
constructor 问题
在 ES6 中,class 中的 constructor 方法是用来初始化实例对象的。而在 ES10 中,constructor 方法的行为有所不同。如果没有显式定义 constructor 方法,那么会自动生成一个空的 constructor 方法。如果显式定义了 constructor 方法,那么必须调用 super() 方法,否则会报错。
下面是一个示例:
// javascriptcn.com 代码示例 class Animal { constructor(name) { this.name = name; } } class Dog extends Animal { constructor(name, age) { // 必须调用 super() 方法 super(name); this.age = age; } } const d = new Dog("旺财", 3); console.log(d.name); // 输出 "旺财" console.log(d.age); // 输出 3
需要注意的是,如果子类没有显式定义 constructor 方法,那么会继承父类的 constructor 方法。如果父类的 constructor 方法有参数,那么子类也必须提供相同数量的参数。
总结
ES10 中引入的 private 和 static 成员,以及 constructor 问题,都是为了让 class 更加灵活和强大。在使用时,需要注意这些新特性的语法和用法,以便正确地使用它们。同时,也需要注意一些细节和注意事项,以免出现错误。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65812aa2d2f5e1655dc5c574