2016-05-26 7 views
2

次の例を見てください。 ES5でES6クラスの `this`へのネストされた参照

class MyClass { 
    run() { 
    this.hello = 1; 
    co(function*() { 
     this.hello // this is now 'undefined' 
    }) 
    } 
} 
new MyClass().run() 

Iは、通常、var cls = thisように、関数の開始時に別の変数にthisを割り当てることになるが、私はES6/ES7は、今では、この問題を解決するであろうことを期待しているであろう。

これを行うより良い方法はありますか?

+1

'this'問題が矢印関数の構文は、ジェネレータをサポートしていないことを除いて、矢印の機能によって解決されます。したがって、 'bind'を使うか、varの代わりに' const'を使います。 – Sheepy

答えて

2

あなたはbindを使用することができます。

class MyClass { 
    run() { 
    this.hello = 1; 
    co(function*() { 
     this.hello // 1 
    }.bind(this)); 
    } 
} 
new MyClass().run() 
+0

'.bind()'を使用すると、 'co.this'をどのように参照できますか? – sleepycal

+1

@sleepycal 'co'の' this'は 'global'です。あなたはそれを必要としません。通常、バインドはジェネレータ関数には不適切ですが、 'co'と一緒に使うのは安全です。 – estus

+0

@estus 'co'以外のlibsには、より良い方法があるのですか、' cls = this'を標準に再割り当てしていますか? – sleepycal

関連する問題