将命名函数绑定到上下文
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) => {...}
我有一个这样的命名函数
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) => {...}