Class 的静态方法和属性

Class 的静态方法

类相当于实例的原型,所有在类中定义的方法,都会被实例继承。如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”。

class Foo {
  static classMethod() {
    return 'hello';
  }
}
// 通过名称调用静态方法
Foo.classMethod(); // 'hello'

// 实例化后报错
var foo = new Foo();
foo.classMethod();
// TypeError: foo.classMethod is not a function

Class的静态属性和实例属性

静态属性指的是Class本身的属性,即Class.propname,而不是定义在实例对象(this)上的属性。

class Foo {
}
Foo.prop = 1;
Foo.prop // 1

上面的写法为Foo类定义了一个静态属性prop。

目前,只有这种写法可行,因为ES6明确规定,Class内部只有静态方法,没有静态属性。

// 以下两种写法都无效

class Foo {
  // 写法一
  prop: 2
  // 写法二
  static prop: 2
}
Foo.prop // undefined