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.