6到5个es6类,新的Date()触发超出最大调用堆栈

时间:2015-02-12 22:23:39

标签: javascript ecmascript-6 babeljs

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

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

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

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

  get active() {
    return this.active
  }

}

new DateTime()

1 个答案:

答案 0 :(得分: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时,这将成为一个递归事件。