Classes

构造方法

构造方法是创建和初始化使用类创建的一个对象的一种特殊方法。
constructor([arguments]) { ... }
一个 class 中只能有一个指定的 ”constructor“ (构造)方法。如果 class 定义的时候包含多个构造方法,程序将会抛出 SyntaxError错误。
在构造方法中可以使用 super 关键字来调用父类的构造方法。
如果没有显式指定构造方法,则会添加默认的constructor方法。

class Square extends Polygon {
  constructor(length) {
    // 在这里调用父类的"length",赋值给矩形的"width"和"height"。
    super(length, length);
    // 注意:子类必须在constructor方法中调用super方法,否则新建实例时会报错。
    this.name = 'Square';
  }

  get area() {
    return this.height * this.width;
  }

  set area(value) {
    this.area = value;
  } 
}

extends

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

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();
  }
}

static

static 关键字为一个类定义了一个静态方法。
静态方法调用直接在类上进行,而在类的实例上不可被调用。
静态方法通常用于创建 实用/工具 函数。

调用静态方法

为了在同一个类的另一个静态方法中调用一个静态方法,你可以使用 this关键字。

class StaticMethodCall {
    static staticMethod() {
        return 'Static method has been called';
    }
    static anotherStaticMethod() {
        return this.staticMethod() + ' from another static method';
    }
}
StaticMethodCall.staticMethod();
// 'Static method has been called'

StaticMethodCall.anotherStaticMethod();
// 'Static method has been called from another static method'

从类的构造函数和其他方法
静态方法不能直接在非静态方法中使用 this关键字来访问。你需要使用类名来调用它们:CLASSNAME.STATIC_METHOD_NAME()或者将其作为构造函数的属性来调用该方法: this.constructor.STATIC_METHOD_NAME()

class StaticMethodCall {
    constructor() {
        console.log(StaticMethodCall.staticMethod());
        // 'static method has been called.'
        console.log(this.constructor.staticMethod());
        // 'static method has been called.'
    }
    static staticMethod() {
        return 'static method has been called.';
    }
}

你可能感兴趣的:(Classes)