4

我有一个这样的命名函数

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

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

我正在寻找这样的东西

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

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

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

addEventListener(callback) {
   callback(currentArg);
}

我将在其中传递处理程序,它将在绑定上下文中执行。

4

3 回答 3

2

来自MDN

bind() 方法创建一个新函数,在调用该函数时,将其 this 关键字设置为提供的值,并在调用新函数时提供的任何参数之前具有给定的参数序列。

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

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

var newFunc = handler.bind(newContext,arg);
于 2018-05-11T11:26:40.293 回答
2

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

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

或者只是使用一个箭头函数,它将使用一个词法上下文this

var handler = (arg) => {...}
于 2018-05-11T11:38:18.627 回答
1

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

handler = (arg) => {
    this.arg = arg;
};
于 2018-05-11T11:29:57.123 回答