类 - JavaScript

类 - JavaScript

类体

类的身体是花括号 {} 中的部分。你可以在这里定义类成员,例如方法或构造函数。

即使没有 "use strict" 指令,类体也会在严格模式下执行。

类元素可以从三个方面进行描述:

种类:Getter、setter、方法或字段

位置:静态或实例

可见性:公共或私有

它们共同构成了 16 种可能的组合。为了更逻辑地划分参考资料并避免内容重叠,不同的元素在不同的页面中详细介绍。

方法定义

公共实例方法

getter

公共实例 getter

setter

公共实例 setter

公共类字段

公共实例字段

static

公共静态方法、getter、setter 和字段

私有元素

所有私有元素

注意:私有元素有一个限制,即在同一个类中声明的所有私有名称都必须是唯一的。所有其他公共属性没有这个限制——你可以有多个同名的公共属性,最后一个会覆盖其他的。这与对象初始化器中的行为相同。

此外,还有两种特殊的类元素语法:constructor 和静态初始化块,它们有各自的引用。

构造函数

constructor 方法是用于创建和初始化类创建的对象的特殊方法。在一个类中只能有一个名为“constructor”的特殊方法——如果类中包含多个 constructor 方法,则会抛出 SyntaxError。

构造函数可以使用 super 关键字调用超类的构造函数。

你可以在构造函数中创建实例属性

jsclass Rectangle {

constructor(height, width) {

this.height = height;

this.width = width;

}

}

或者,如果你的实例属性值不依赖于构造函数的参数,你可以将它们定义为类字段。

静态初始化块

静态初始化块允许对静态属性进行灵活初始化,包括在初始化期间评估语句,同时授予访问私有作用域的权限。

可以声明多个静态块,并且这些块可以与静态字段和方法的声明交错(所有静态项都按声明顺序进行评估)。

方法

方法在每个类实例的原型上定义,并由所有实例共享。方法可以是普通函数、异步函数、生成器函数或异步生成器函数。有关更多信息,请参阅方法定义。

jsclass Rectangle {

constructor(height, width) {

this.height = height;

this.width = width;

}

// Getter

get area() {

return this.calcArea();

}

// Method

calcArea() {

return this.height * this.width;

}

*getSides() {

yield this.height;

yield this.width;

yield this.height;

yield this.width;

}

}

const square = new Rectangle(10, 10);

console.log(square.area); // 100

console.log([...square.getSides()]); // [10, 10, 10, 10]

静态方法和字段

static 关键字为类定义静态方法或字段。静态属性(字段和方法)定义在类本身上,而不是每个实例上。静态方法通常用于为应用程序创建实用函数,而静态字段则适用于缓存、固定配置或任何不需要在实例之间复制的数据。

jsclass Point {

constructor(x, y) {

this.x = x;

this.y = y;

}

static displayName = "Point";

static distance(a, b) {

const dx = a.x - b.x;

const dy = a.y - b.y;

return Math.hypot(dx, dy);

}

}

const p1 = new Point(5, 5);

const p2 = new Point(10, 10);

p1.displayName; // undefined

p1.distance; // undefined

p2.displayName; // undefined

p2.distance; // undefined

console.log(Point.displayName); // "Point"

console.log(Point.distance(p1, p2)); // 7.0710678118654755

字段声明

使用类字段声明语法,构造函数的示例可以写成:

jsclass Rectangle {

height = 0;

width;

constructor(height, width) {

this.height = height;

this.width = width;

}

}

类字段类似于对象属性,而不是变量,因此我们不使用诸如 const 等关键字来声明它们。在 JavaScript 中,私有元素使用特殊的标识符语法,因此也不应使用 public 和 private 等修饰符关键字。

如上所示,字段可以带或不带默认值声明。没有默认值的字段默认为 undefined。通过提前声明字段,类定义变得更具自解释性,并且字段始终存在,这有助于优化。

有关更多信息,请参阅公共类字段。

私有元素

使用私有字段,定义可以如下完善。

jsclass Rectangle {

#height = 0;

#width;

constructor(height, width) {

this.#height = height;

this.#width = width;

}

}

从类外部引用私有字段是错误的;它们只能在类体内部读取或写入。通过定义类外部不可见的内容,你可以确保类的用户不会依赖于内部实现,这些内部实现可能会因版本而异。

私有字段只能在字段声明中提前声明。它们不能像普通属性那样通过赋值稍后创建。

私有方法和访问器也可以使用与其公共对应项相同的语法定义,但标识符以 # 开头。

有关更多信息,请参阅私有元素。

相关推荐

TCL免污式洗衣机评测 ——“真免污,问TCL”
Bronx怎么翻译及发音
我如何翻译邮件?