JavaScript 类继承
类继承
要创建类继承,请使用 extends
关键字。
通过类继承创建的类继承了另一个类的所有方法
示例
创建一个名为 "Model" 的类,它将继承 "Car" 类的方法
class Car {
constructor(brand) {
this.carname = brand;
}
present() {
return '我有一辆 ' + this.carname;
}
}
class Model extends Car {
constructor(brand, mod) {
super(brand);
this.model = mod;
}
show() {
return this.present() + ', 它是一辆 ' + this.model;
}
}
let myCar = new Model("Ford", "Mustang");
document.getElementById("demo").innerHTML = myCar.show();
super()
方法指向父类。
通过在构造函数中调用 `super()` 方法,我们可以调用父类的构造函数,并访问父类的属性和方法。
继承对于代码重用非常有用:在创建新类时,可以重用现有类的属性和方法。
Getter 和 Setter
类还允许你使用 getter 和 setter。
对于你的属性,使用 getter 和 setter 可能是明智的,特别是如果你想在返回值之前,或者在设置值之前对值执行一些特殊操作。
要在类中添加 getter 和 setter,请使用 `get` 和 `set` 关键字。
示例
为“carname”属性创建一个 getter 和 setter
class Car {
constructor(brand) {
this.carname = brand;
}
get cnam() {
return this.carname;
}
set cnam(x) {
this.carname = x;
}
}
const myCar = new Car("Ford");
document.getElementById("demo").innerHTML = myCar.cnam;
注意: 即使 getter 是一个方法,当你想要获取属性值时,也不要使用括号。
getter/setter 方法的名称不能与属性的名称相同,在此例中是 `carname`。
许多程序员在属性名前面加上下划线字符 `_`,以区分 getter/setter 和实际的属性。
示例
你可以使用下划线字符来区分 getter/setter 和实际的属性。
class Car {
constructor(brand) {
this._carname = brand;
}
get carname() {
return this._carname;
}
set carname(x) {
this._carname = x;
}
}
const myCar = new Car("Ford");
document.getElementById("demo").innerHTML = myCar.carname;
要使用 setter,请使用与设置属性值相同的语法,不带括号。
示例
使用 setter 将 carname 更改为“Volvo”。
class Car {
constructor(brand) {
this._carname = brand;
}
get carname() {
return this._carname;
}
set carname(x) {
this._carname = x;
}
}
const myCar = new Car("Ford");
myCar.carname = "Volvo";
document.getElementById("demo").innerHTML = myCar.carname;
提升 (Hoisting)
与函数和其他 JavaScript 声明不同,类声明不会被提升。
这意味着你必须在使用类之前声明它。
示例
//你还不能使用该类。
//myCar = new Car("Ford") 将会引发错误。
class Car {
constructor(brand) {
this.carname = brand;
}
}
//现在你可以使用该类了。
const myCar = new Car("Ford")
自己动手试一试 »
注意: 对于其他声明,例如函数,当你尝试在声明之前使用它们时,不会出现错误,因为 JavaScript 声明的默认行为是提升(将声明移动到顶部)。