取值函数(getter)和存值函数(setter)

与ES5一样在“类”的内部可以使用getset关键字,对某个属性设置存值函数和取值函数,拦截该属性的存取行为。

上面代码中,prop属性有对应的存值函数和取值函数,因此赋值和读取行为都被自定义了。
存值函数和取值函数是设置在属性的 Descriptor 对象上的。

  1. class CustomHTMLElement {
  2. constructor(element) {
  3. this.element = element;
  4. }
  5. get html() {
  6. return this.element.innerHTML;
  7. }
  8. set html(value) {
  9. this.element.innerHTML = value;
  10. }
  11. }
  12. var descriptor = Object.getOwnPropertyDescriptor(
  13. CustomHTMLElement.prototype, "html"
  14. );
  15. "get" in descriptor // true
  16. "set" in descriptor // true

上面代码中,存值函数和取值函数是定义在html属性的描述对象上面,这与 ES5 完全一致。

Class 表达式

与函数一样,类也可以使用表达式的形式定义。

  1. const MyClass = class Me {
  2. getClassName() {
  3. return Me.name;
  4. }
  5. };