extends

extends关键词被用在类声明或者类表达式上,以创建一个类是另一个类的子类。

语法

class ChildClass extends ParentClass { ... }

描述

extends关键词用来创建一个普通类或者内建对象的子类。

扩展的.prototype必须是一个Object 或者 null

示例

使用 extends

第一个例子是根据名为 Polygon 类创建一个名为Square的类。 你可以从实战演示看到这个例子。

class Square extends Polygon {
  constructor(length) {
    // 这里把length传参给父类的构造方法
    // 作为父类Polygon的宽和高
    super(length, length);
    // 备注:在衍生类中使用this前必须先调用super()方法
    // 忽视这一点将会导致一个引用错误
    this.name = 'Square';
  }
  get area() {
    return this.height * this.width;
  }
  set area(value) {
    this.area = value;
  }
}

使用 extends 扩展内建对象

这个示例继承了Date 对象。 你可以从实战演示看到这个例子。

class myDate extends Date {
  constructor() {
    super();
  }
  getFormattedDate() {
    var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
    return this.getDate() + "-" + months[this.getMonth()] + "-" + this.getFullYear();
  }
}

扩展 null

可以像扩展普通类一样扩展null,但是新对象的原型将不会继承 Object.prototype.

class nullExtends extends null {
  constructor() {}
}
Object.getPrototypeOf(nullExtends); // Function.prototype
Object.getPrototypeOf(nullExtends.prototype) // null

详述

详述 状态 注释
ECMAScript 2015 (6th Edition, ECMA-262)
extends
Standard 最初的定义
ECMAScript Latest Draft (ECMA-262)
extends
Draft  

浏览器兼容性

特性 Chrome Firefox (Gecko) Internet Explorer Opera Safari
基本支持 42.0 仅在夜间频道(Nightly channel)可用自2015年3月 ? ? ?
数组的子类 43.0 未实现 ? ? ?
特性 Android Android Webview Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile Chrome for Android
基本支持 未实现 42.0 仅在夜间频道(Nightly channel)可用自2015年3月 ? ? ? 42.0
数组的子类 未实现 43.0 未实现 ? ? ? 43.0

扩展阅读

文档标签和贡献者