Javascript:绑定(bind)参数,但保留原始参数?

标签 javascript

我想在 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/

相关文章:

javascript eval(),控制输入和真正的危险

javascript - 如何使用 PhantomJS 下载 csv 文件

javascript - javascript 中一次仅选中一个复选框

javascript - 将 jquery 选项卡堆叠在一起

javascript - 当选择更改时,JQuery 更改输入

javascript - 是否需要setTimeout?

javascript - 传单 map 事件 'load' 不触发

javascript - 如何获取进程nodejs的局部范围内的所有变量

javascript - 如何在 Django 模板中迭代字典?

javascript - 使用复选框的 "onclick"时防止默认操作的简单方法?