扩展类

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 是专门用于检索和定义 值。使用 getset 关键字定义的方法允许 您创建可以像静态方法一样与之交互的方法 属性。

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 

getset 属性在类的原型属性中定义, 因此可供类的所有实例使用。

检查您的理解情况

请选择关于使用 extends 关键字创建的类的真实陈述。

它充当其扩展的类的子级。
它会继承其父类的属性和方法。
它充当其扩展的类的父级。
It can't overwrite methods from a parent class.