箭头函数中的this.emit()

时间:2016-04-04 02:48:45

标签: javascript ecmascript-6

尝试在保持this.emit()的同时弄清楚如何执行箭头功能。在gulp和ES6中我有这样的功能:

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

注意this.emit(' end')的用法。当我使用非箭头功能时效果很好,但是我做的第二个:

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

this.emit('end')已不再可用。如何使用箭头函数编写该函数并维护this.emit()

2 个答案:

答案 0 :(得分:1)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

在ECMAScript2015的箭头函数中,this始终引用外部函数,没有运行时上下文。

meaing:

function out() {
  var name = "out"
  return function() {
    return function() {
      return function() {
        console.log(this.name)   // out
      }
    }
  }
}
  • arrow function no Object arguments
  • 箭头功能无法使用yield
  • 箭头功能无法由new
  • 初始化

答案 1 :(得分:0)

如果on返回的对象的sass()方法安排将提供的函数作为另一个对象的方法调用,并且该函数需要获取调用它的对象的值,要调用其emit方法,请使用function声明。

箭头功能避免使用  Function.prototype.bind在定义上下文的当前this值上,始终使用函数内的定义上下文的this值。箭头函数的另一个方面是它们不能用作构造函数。箭头函数不要弃用函数声明和表达式,并且应该根据具体情况考虑“优先”。