extends
关键字用于类声明或表达式来创建
作为另一个类的子类,它具有父类(有时
作为子类(有时为
称为“子类”或“派生类”)。
class ParentClass {}
class ChildClass extends ParentClass {}
Object.getPrototypeOf( ChildClass );
> class ParentClass {}
这些子类会继承父类的属性和方法。这个 您可以扩展类的核心功能,以实现更具体的功能, 而无需重载父类来适应每个可能的用例, 或重新实现具有类似用途的代码。
子类可以提供自己的继承方法实现 从父类加载:
class MyClass {
constructor( myPassedValue ) {
this.instanceProp = myPassedValue;
}
classMethod() {
console.log( `The value was '${ this.instanceProp }.'`)
}
}
class ChildClass extends MyClass {
classMethod() {
console.log( `The value was '${ this.instanceProp },' and its type was '${ typeof this.instanceProp }.'`)
}
}
const myParentClassInstance = new MyClass( "My string." );
const mySubclassInstance = new ChildClass( 100 );
myParentClassInstance.classMethod();
> "The value type was 'string.'"
mySubclassInstance.classMethod();
> "The value was '100,' and its type was 'number.'"
您还可以在
使用 super
的子类:
class MyClass {
constructor( myPassedValue ) {
this.instanceProp = myPassedValue;
}
classMethod() {
console.log( `The value was '${ this.instanceProp }.'`)
}
}
class ChildClass extends MyClass {
subclassMethod() {
super.classMethod();
console.log( `The value type was '${ typeof this.instanceProp }.'`)
}
}
const mySubclassInstance = new ChildClass( 100 );
mySubclassInstance.subclassMethod();
> The value was '100.'
> The value type was 'number.'
如前面的示例所示,当 中省略 constructor()
方法时
子类的上下文,JavaScript 的隐式构造函数会调用父类的构造函数
以及同一组实参。不过,如果有
构造函数,必须先调用 super()
以及任何
在引用 this
之前必须传递参数。
class MyClass {
constructor( myPassedValue ) {
this.instanceProp = myPassedValue;
}
classMethod() {
console.log( `The value was '${ this.instanceProp }.'`)
}
}
class ChildClass extends MyClass {
constructor( myPassedValue ) {
super( myPassedValue );
this.modifiedProp = myPassedValue + 50;
}\
subclassMethod() {
super.classMethod();
console.log( `The value type was '${ typeof this.instanceProp }.'`)
}
}
const mySubclassInstance = new ChildClass( 100 );
mySubclassInstance;
> MyClass { instanceProp: 100, modifiedProp: 150 }
getter 和 setter 是专门用于检索和定义
值。使用 get
和 set
关键字定义的方法允许
您创建可以像静态方法一样与之交互的方法
属性。
class MyClass {
constructor( originalValue ) {
this.totalValue = 0;
}
set doubleThisValue( newValue ) {
this.totalValue = newValue * 2;
}
get currentValue() {
console.log( `The current value is: ${ this.totalValue }` );
}
}
const myClassInstance = new MyClass();
myClassInstance;
> MyClass { totalValue: 0 }
myClassInstance.doubleThisValue = 20;
myClassInstance.currentValue;
> The current value is: 40
get
和 set
属性在类的原型属性中定义,
因此可供类的所有实例使用。
检查您的理解情况
请选择关于使用 extends
关键字创建的类的真实陈述。
它会继承其父类的属性和方法。
它充当其扩展的类的父级。
它充当其扩展的类的子级。
It can't overwrite methods from a parent class.