将命名函数绑定到上下文

时间:2018-05-11 11:23:24

标签: javascript ecmascript-6 javascript-events event-binding

我有一个这样的命名函数

function handler(arg) {
  this.arg = arg;
}

有没有办法将上下文绑定到此函数?

我正在寻找像这样的东西

function handler(arg) {
  this.arg = arg;
}.bind(this);

允许在任何上下文中调用此函数,但它将始终使用绑定上下文。

例如,我有另一个功能(在供应商代码中,我无法编辑)

addEventListener(callback) {
   callback(currentArg);
}

我将传递处理程序,它将使用绑定上下文执行

3 个答案:

答案 0 :(得分:2)

来自MDN

  

bind()方法创建一个新函数,当被调用时,它具有它   此关键字设置为提供的值,具有给定的序列   调用新函数时提供的任何参数。

根据此定义,您可以执行以下操作

function handler(arg) {
  this.arg = arg;
}

var newFunc = handler.bind(newContext,arg);

答案 1 :(得分:1)

如果您只想避免上下文更改,可以使用箭头功能:

handler = (arg) => {
    this.arg = arg;
};

答案 2 :(得分:1)

我不确定您将在何处以及如何使用它,但您可以使用函数表达式而不是函数减速:

 var handler = function handler(arg) {
  this.arg = arg;
}.bind(this)

或者只使用arrow functionthis将使用词汇上下文:

var handler = (arg) => {...}