Javascript 6to5 es6类,超过了新日期()触发器的最大调用堆栈

Javascript 6to5 es6类,超过了新日期()触发器的最大调用堆栈,javascript,ecmascript-6,babeljs,Javascript,Ecmascript 6,Babeljs,我正在使用6to5编译器编写一个ES6类。我有一个非常基本的类,它在setter函数中调用new Date(),不幸的是导致最大调用堆栈超过了Chrome异常,并且在FireFox中递归过多 我不确定以下模式有什么问题,但调用newdate()是异常的原因: class DateTime { constructor() { this.active = null } set active() { this.active = new Date() } get

我正在使用6to5编译器编写一个ES6类。我有一个非常基本的类,它在setter函数中调用
new Date()
,不幸的是导致
最大调用堆栈超过了
Chrome异常,并且在FireFox中递归过多

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

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

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

  get active() {
    return this.active
  }

}

new DateTime()

看起来属性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时,这将成为一个递归事件。

您可以发布编译后的代码吗?@Bergi我找到了答案。我是ES6新手,这可能是初学者的一个常见错误。哦,没关系,我应该看到这一点。在setter中分配到self-same属性也是ES5中的一个常见错误:-)不一定要使用它,而是对它进行辅助-注意
this.active=…
:-)很好,更新了我的帖子。谢谢,我没有在ES5上下文中使用类,我认为在使用构造函数时会发生冲突更简单,因为您可以清楚地看到
这个
上的确切属性。如果这有意义的话。哦,创建无限递归就像
var obj={set active(x){this.active=x;}};obj.active=0;-)哈,显然我错过了那波;-)