我想在 JavaScript 中为事件监听器的回调注入(inject)一些值,但保留原始事件对象。这可能吗?
示例(#1):
function callback(event, arg) {
console.log(event);
console.log(arg);
}
var something = 2;
element.addEventListener(
"click",
callback.bind(element, ???, something)
);
如何在绑定(bind)其他参数的同时保留原始 event
对象?
我知道我能做到(#2):
element.addEventListener(
"click",
function (event) {
callback(event, something);
}
);
甚至这个(#3):
element.addEventListener(
"click",
function (event) {
callback(event, this);
}.bind(something)
);
但#2 使代码更难看,因为我需要在异步调用中使用变量 something
,而它可能在点击时已被更改。
#3 偷了这个
,我可能需要那个。
我是否遗漏了什么和/或我对绑定(bind)的理解是否正确?
最佳答案
您可以通过改变参数的顺序来“柯里化(Currying)”您想要的参数:
function callback(arg, event) {
console.log(event);
console.log(arg);
}
var something = 2;
element.addEventListener("click", callback.bind(null, something));
通过这种方式,您可以将“绑定(bind)”或部分应用作为回调传递,并且仍然会收到一个 Event
对象。有关详细信息,请参阅 "Partial Functions" MDN 的部分 Function.prototype.bind
文档。
关于Javascript:绑定(bind)参数,但保留原始参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33027414/