ES6 Class

101 阅读1分钟

ES6 Class只是一个语法糖,可以由ES5构造函数替代,只是class的写法更符号面向对象的语法

constructor

constructor()方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。一个类必须有constructor()方法,如果没有显式定义,一个空的constructor()方法会被默认添加

class Point {
}

// 等同于
class Point {
  constructor() {}
}

constructor 默认是返回实例对象的return this,当然也可以手动返回一个全新的对象return Object.create(null); 此时返回的对象将不再是calss的实例

类的实例

创建实例

class Point {
  // ...
}
var point = new Point(2, 3);
  • 类的属性和方法,除非显式定义在其本身(即定义在this对象上),否则都是定义在原型上(即定义在class上)
  • 类的所有实例共享一个原型对象
  • 实例属性可以生命在最顶层 (属性写在constructor外为实例对象的属性,函数写在constructor外为原型的函数)
// 旧
class IncreasingCounter {
  constructor() {
    this._count = 0;
  }
}
// 新
class IncreasingCounter {
  _count = 0
  constructor() {
  }
}
  • 可以使用getset关键字,对某个属性设置存值函数和取值函数,拦截该属性的存取行为
class MyClass {
  constructor() {}
  get prop() {
    return 'getter';
  }
  set prop(value) {
    console.log('setter: '+value);
  }
}

属性表达式

类的属性名,可以采用表达式

let methodName = 'getArea';

class Square {
  constructor(length) {
    // ...
  }

  [methodName]() {
    // ...
  }
}

Class表达式

类也可以使用表达式的形式定义

const MyClass = class Me {
  getClassName() {
    return Me.name;
  }
};

静态属性 静态方法

静态属性,静态方法是类的属性和方法,并不是实例的

class Foo {
  static bar() {}
  static baz = 1
}

Foo.bar()
Foo.baz