2016-04-04 7 views
2

Der Versuch, herauszufinden, wie man eine Pfeilfunktion unter Beibehaltung this.emit(). In Zug und ES6 Ich habe eine Funktion wie so:this.emit() in einer Pfeilfunktion

gulp.src([paths.sass]) 
    .pipe(sourcemaps.init()) 
    .pipe(sass().on('error', function (e) { 
     reportError(e); 
     this.emit('end'); 
    })) 

Beachten Sie die Verwendung von this.emit ('Ende'). Funktioniert prima, wenn ich eine nicht Pfeil Funktion zu verwenden, aber die zweite ich tun:

gulp.src([paths.sass]) 
    .pipe(sourcemaps.init()) 
    .pipe(sass().on('error', (e) => { 
     reportError(e); 
     this.emit('end'); 
    })) 

this.emit('end') ist nicht mehr verfügbar. Wie könnte ich diese Funktion mit einem Pfeil Funktion schreiben und die this.emit()

+1

Sie können nicht, Pfeilfunktionen haben kein 'this'. – elclanrs

+3

Arrow-Funktionen sind an ihren umgebenden Kontext gebunden - wie 'function (e) {} .bind (this)'. Diese Bindung kann nicht rückgängig gemacht oder nachträglich geändert werden. –

+0

Willkommen bei 'this' sucks – naomik

Antwort

0

nicht initialisiert verwendet, kann die on Wenn kann Methode der sass() re Das gedrehte Objekt ordnet an, die bereitgestellte Funktion als eine Methode eines anderen Objekts aufzurufen, und die Funktion muss den Wert des aufgerufenen Objekts abrufen. Um die Methode emit aufzurufen, verwenden Sie die Deklaration function.

Pfeil Funktionen vermeiden Function.prototype.bind auf dem aktuellen this Wert des definiere Zusammenhangs mit, indem sie immer mit dem this Wert innerhalb der Funktion der Definition von Kontext. Ein weiterer Aspekt von Pfeilfunktionen ist, dass sie nicht als Konstruktoren verwendet werden können. Pfeilfunktionen verfallen nicht Funktionserklärungen und Ausdrücke und sollten nur von Fall zu Fall als "vorzuziehen" betrachtet werden.

Verwandte Themen