3

我正在使用 6to5 编译器编写一个 ES6 类。我有一个非常基本的类,它调用new Date()setter 函数,不幸的是导致maximum callstack exceededChrome 异常和too much recursionFireFox。

我不确定以下模式有什么问题,但调用new Date()是异常的原因:

class DateTime {
  constructor() {
    this.active = null
  }

  set active() {
    this.active = new Date()
  }

  get active() {
    return this.active
  }

}

new DateTime()
4

1 回答 1

3

看起来该属性this.active实际上是对 setter 方法的自引用。更正后的代码如下:

  class DateTime {
    constructor() {
      this._active = null
    }

    set active( date ) {
      this._active = new Date( date || Date.now() )
    }

    get active() {
      return this._active
    }

    toString() {
      return this._active.toString()
    }

  }

 new DateTime() 

基本上,在 ES6 上下文中的 setter 内部分配 this.active将在属性被分配之前再次调用 setter。当再次调用 setter 时,这将成为一个递归事件。

于 2015-02-12T22:35:37.633 回答