Javascript 使用addEventListener绑定

Javascript 使用addEventListener绑定,javascript,events,dom-events,addeventlistener,Javascript,Events,Dom Events,Addeventlistener,在JavaScript中的事件侦听器上使用bind()时,我无法再获得带有“this”的元素 这是我的密码: function callback(){ console.log(this.someVar); // Works fine console.log(this); // No longer refers to the element, outputs "Object" } callback = callback.bind({someVar:

在JavaScript中的事件侦听器上使用
bind()
时,我无法再获得带有“this”的元素

这是我的密码:

function callback(){

     console.log(this.someVar);
     // Works fine

     console.log(this);
     // No longer refers to the element, outputs "Object"

}

callback = callback.bind({someVar: 1234});

element.addEventListener('click', callback);
你知道怎么解决这个问题吗

只能调用bind()一次。调用bind()后,
引用绑定到参数。因此,无法将偶数分配给此。例如:

function f() {return this;}
f = f.bind({a:1});
f(); // => {a:1}
f = f.bind({a:2}); // this is what addEventListener actually do as if it bind this to even
f(); // {a:1}
addEventListener无法再次绑定该函数。

方法创建一个新函数,调用该函数时,将其
this
关键字设置为提供的值

所以,当你调用一个函数,比如

callback=callback.bind({someVar:1234})

函数回调中的对象将是
{someVar:1234}

要访问回调函数中的
someVar
,必须使用
this.someVar

我希望这有帮助


如果仍不清楚,请参阅本文。如果要传递一个变量,但保留此上下文,则可以使用curry或partial application:

函数必须接收一个值并返回另一个函数。通过这种方式,您可以执行以下操作:

函数回调(num){
返回函数(){
console.log(num);
console.log(this.id);
}
}
var数=1;
document.getElementById(“hello”).addEventListener(“单击”,回调(数字));
//更改变量
数量=2;
document.getElementById(“world”).addEventListener(“单击”,回调(编号));
//再次更改变量
数字=3
你好

World
这就是
bind
所做的-它永久地设置
上下文。如果您不想要这种行为,那么也许您不应该使用
bind
。您得到了什么输出?@VLAZ我可以使用什么作为替代?@KaleshKaladharan“Object”@VLAZ我想在事件中向函数传递一个变量,但这个变量一直在变化。当事件激发时,我希望函数输出创建EventListener时的变量值。您可以多次调用
bind
。即使在绑定函数上调用它,也可以执行部分应用程序