2016-04-04 18 views
2

this.emit()'u korurken bir ok işlevinin nasıl yapıldığını anlamaya çalışmak.this.emit() bir ok işlevinde

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

Bildirimi this.emit ('sonunda') kullanımı: yudum ve ES6 ben bir işlev şöyle var. Ben olmayan bir ok işlevini kullandığınızda harika çalışıyor, ancak ikinci yapmam:

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

this.emit('end') artık mevcut değil. Ben bir ok fonksiyonunu kullanarak o işlevi yazıp ECMAScript2015 ok işlevinde this.emit()

+1

Yapamazsınız, ok işlevlerinde bu '' 'yoktur. – elclanrs

+3

Ok işlevleri çevreleyen bağlamlarına bağlı - işlev (e) {} .bind (this) 'ile aynı. Bu bağlanma daha sonra geri alınamaz veya değiştirilemez. –

+0

Bu şeye hoş geldiniz – naomik

cevap

0

tarafından başlatılmış olamaz yield

  • ok işlevini kullanarak olamaz hiçbir nesne sass() yeniden yöntemi döndürülmüş nesne, bir başka nesnenin bir yöntemi olarak sağlanan işlevi çağırmak için düzenler ve fonksiyonun, emit yöntemini çağırmak için çağrılan nesnenin değerini alması gerekir, function beyanını kullanın.

    Ok fonksiyonları daima işlevi içinde tanımlayan bağlamda en this değerini kullanarak, tanımlama bağlamında mevcut this değerine Function.prototype.bind kullanmaktan kaçının. Ok işlevlerinin bir başka yönü, kurucu olarak kullanılamamasıdır. Ok fonksiyonları işlev bildirimlerini ve ifadelerini reddetmez ve yalnızca duruma göre "tercih edilebilir" olarak düşünülmelidir.