javascript - 6to5 es6 类,new Date() 触发超过最大调用堆栈

标签 javascript ecmascript-6 babeljs

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

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

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

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

  get active() {
    return this.active
  }

}

new DateTime()

最佳答案

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

  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() 

基本上,赋值 this.active 在 ES6 上下文中的 setter 中将在属性可以赋值之前再次调用 setter。当再次调用 setter 时,这就变成了一个递归事件。

关于javascript - 6to5 es6 类,new Date() 触发超过最大调用堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28489018/

相关文章:

javascript - Grunt babel 没有为 IE 转换箭头函数

babeljs - swiperjs es 模块构建在 IE11 浏览器中不起作用

javascript - Babel 6 只有 JSX 转换,没有其他转换

javascript - Ajax 调用中的 Ajax 调用,第一个总是完成?

javascript - 创建新作用域时,具有子指令的父指令将不起作用

javascript - oTree/django 中的强制 slider

javascript - 如何在React中实现基于多角色的授权

javascript - 在 Windows 中运行用于创建条形图的 Javascript 代码

javascript - 如何命名 es6 类(针对 React 组件)

JavaScript (ES6) : Using spread operator inside conditional expression (? -运算符)