我正在尝试执行一个函数定义的对象 属性 作为对 addEventListener 的引用传递

I'm triying to execute a function defined object property passing as a reference to addEventListener

如果我通过 alert(i) 更改匿名函数中的代码,一切都会正常运行。 但是当我将警报作为参考回调传递并尝试 运行 它作为回调(i)时它不起作用。

我尝试过使用 bind 和 this,但没有找到如何让它工作。

使用 eval 有效,但我想了解如何以正确的方式解决它。

objectEventCb = {
  click: alert
}

for (let j = 0; j < Object.keys(objectEventCb).length; ++j) {
    let keys = Object.keys(objectEventCb);
    sp[i].addEventListener(keys[j], function() {
        objectEventCb[keys[j]](i)
    });
}

这是一个更大函数的一部分,其中 sp[i] 是 for 循环中的所有跨度元素。

你可以试试:

objectEventCb = {
  click: (number) => alert(number)
}

我猜你传递给 'click' 的不是可调用的 alert() 函数,而是其他东西(没试过)。无论如何,我向您展示的代码是一个匿名函数,可确保您将警报作为函数调用。