2016-05-26 8 views
2

Nehmen Sie das folgende Beispiel;Verschachtelte Referenz auf `this` in ES6-Klassen

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

In ES5 ich normalerweise this auf eine andere Variable zu Beginn der Funktion zuweisen würde, wie var cls = this, aber ich hätte gehofft, dass ES6/ES7 dieses Problem, indem nun gelöst würde.

Gibt es einen besseren Weg, dies zu tun?

+1

Das 'this' Problem durch den Pfeil Funktionen gelöst wird, mit der Ausnahme, dass der Pfeil Funktion Syntax nicht unterstützt Generator. Also entweder 'bind' verwenden oder' const' (statt var) verwenden. – Sheepy

Antwort

2

Sie können bind verwenden:

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

Wenn ich '.bind()' verwende, wie würde ich dann auf 'co.this' verweisen? – sleepycal

+1

@sleepycal 'co's' this' ist 'global', du brauchst es nicht. Normalerweise ist 'bind' mit Generatorfunktionen ungeeignet, aber es ist sicher, es mit' co' zu verwenden. – estus

+0

@estus Gibt es für libs außer 'co' einen besseren Weg, oder wird' cls = this' der Standard neu zugewiesen? – sleepycal