将命名函数绑定到上下文

Bind named function to context

我有一个这样的命名函数

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

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

我正在寻找这样的东西

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

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

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

addEventListener(callback) {
   callback(currentArg);
}

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

来自 MDN

The bind() method creates a new function that, when called, has its this keyword set to the provided value, with a given sequence of arguments preceding any provided when the new function is called.

根据这个定义你可以做以下事情

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

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

如果只是想避免上下文变化,可以使用箭头函数:

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

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

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

或者只使用 arrow function,它将使用 this 的词法上下文:

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