3

6to5 コンパイラを使用して ES6 クラスを作成しています。セッター関数を呼び出す非常に基本的なクラスがありnew Date()、残念ながら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 コンテキストのセッター内で割り当てると、プロパティを割り当てる前にセッターが再度呼び出されます。 this.activeセッターが再度呼び出されると、これは再帰イベントになります。

于 2015-02-12T22:35:37.633 に答える