Javascript 将命名函数绑定到上下文

Javascript 将命名函数绑定到上下文,javascript,ecmascript-6,dom-events,event-binding,Javascript,Ecmascript 6,Dom Events,Event Binding,我有一个这样的命名函数 function handler(arg) { this.arg = arg; } function handler(arg) { this.arg = arg; }.bind(this); 有没有办法将上下文绑定到此函数 我在找这样的东西 function handler(arg) { this.arg = arg; } function handler(arg) { this.arg = arg; }.bind(this); 这将允许在任何上下

我有一个这样的命名函数

function handler(arg) {
  this.arg = arg;
}
function handler(arg) {
  this.arg = arg;
}.bind(this);
有没有办法将上下文绑定到此函数

我在找这样的东西

function handler(arg) {
  this.arg = arg;
}
function handler(arg) {
  this.arg = arg;
}.bind(this);
这将允许在任何上下文中调用此函数,但它将始终使用绑定上下文

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

在这里,我将传递处理程序,它将与绑定的上下文一起执行。

From

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

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

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)
或者只使用一个将使用词汇上下文的

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

看起来像是一个经典的用例,我相信如果你在另一个上下文中声明
handler=handler.bind(this)
,比如说它将绑定到另一个函数的处理程序“this”到那个上下文。你能给出更多细节吗?比如你想在哪里使用它以及为什么?使用
addEventListener(handler.bind(this))
addEventListener(handler.bind(this))通常是一个好建议,但是如果有其他一些函数,比如removeEventListener,就不可能执行removeEventListener(handler.bind(this)),你就不能绑定箭头函数。它将始终在定义它的上下文中调用,但问题是
在任何上下文中调用此函数,但它将始终使用绑定上下文。
没关系,谢谢。出于好奇,您认为通过命名函数来解决这个问题真的是不可能的,而且只能通过匿名实现吗?不必匿名,您可以(也应该!)命名这些函数(我更新了答案以反映这一点)。但它必须是一个函数表达式(在等号的右侧)。对于函数声明,您不能重新分配给该标签,毕竟
bind
将返回一个新的函数实例。