【问题标题】:.bind() with event handlers.bind() 与事件处理程序
【发布时间】:2015-11-18 10:29:22
【问题描述】:

假设我有以下简化函数。

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 绑定到this 有点多余,但我如何才能绑定data 参数并仍然保持event 参数不被破坏?

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

【问题讨论】:

  • d 参数是什么?您无法控制如何调用该函数。为什么不使用闭包?
  • d 是数据,在绑定函数中参数化。

标签: javascript javascript-events function-binding


【解决方案1】:

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

arg1, arg2, ...

在调用目标函数时将参数添加到提供给绑定函数的参数。

这意味着您的 curried 值将出现在 事件对象之前。参见这个小提琴的例子:

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"));

【讨论】:

  • 不可能!这为我解决了一切。非常感谢您的研究!
猜你喜欢
  • 2018-01-25
  • 2013-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多