javascript - .bind() 与事件处理程序

标签 javascript dom-events function-binding

假设我有以下简化函数。

var ex = document.getElementById('exampleElement'),
    data = {
        foo: 'Sample text'
    };

ex.addEventListener('click', function(evt, d) {
    evt.stopPropagation();
    this.innerHTML = d.foo;
}.bind(ex, null, data));

我意识到将 ex 绑定(bind)到 this 在这种特殊情况下有点多余,但是我如何绑定(bind) data 参数并仍然保留事件参数被销毁?

我似乎无法在任何地方找到答案。

最佳答案

根据 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

arg1, arg2, ...

Arguments to prepend to arguments provided to the bound function when invoking the target function.

这意味着您的柯里化(Currying)值将出现在事件对象之前。看这个 fiddle 的例子:

http://jsfiddle.net/5w4vnvof/

var clickme = document.querySelector("#clickme");

clickme.addEventListener("click", function(value, event) {
    var newDiv = document.createElement("div");
    newDiv.innerHTML = value + "<br/>" + event.target.toString();

    document.body.appendChild(newDiv);
}.bind(clickme, "curriedValue"));

关于javascript - .bind() 与事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32191795/

相关文章:

javascript - 删除事件监听器时遇到问题

javascript - 停止网页滚动

javascript - 为什么bind会修复“"failed to execute ' fetch' on 'Window'非法调用”错误?

javascript - 如何将选择从一个选择复制到另一个选择?

javascript - 常量值作为数组元素给出错误

javascript - Queryselector 返回 null,不知道为什么

java - 使用 Selenium 三次点击

javascript - 为什么这个 MDN 示例在 `undefined` 中使用 `.bind(undefined, 37)` ?

java - Java lambda 可以将方法绑定(bind)到它们的参数吗?

javascript - Sprockets:编译独立的 javascript/样式表文件