我正在使用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()
答案 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时,这将成为一个递归事件。