我编写了一个函数,为匹配特定选择器的所有元素添加侦听器,如下所示:
// Add event handler to all elements match a specific selector
function addEventListenerToAll(selector, type, listener)
{
[].forEach.call(document.querySelectorAll(selector), function(element) {
if (element) {
element.addEventListener(type, listener);
}
});
}
然后按如下方式调用函数:
addEventListenerToAll(".myclass", "click", function () {
var url = this.getAttribute('myurl'); // What is 'this' refers to?
});
那么this. getattribute中的this是什么指的是?
根据我的测试,指向foreach循环中的一个元素。然而,我检查了这个文档https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this,它在"Class context"中说,'this'在非静态函数中指的是当前类对象,否则,它默认为全局对象,在浏览器中,它应该是窗口对象。
因此,由于侦听器函数不是类成员函数,它应该引用window而不是?函数可以被赋予不同的this
作用域,而不是默认的。您可以使用apply
方法自己完成此操作。(编辑:正如@pilchard在下面指出的,这不适用于继承父作用域的箭头函数。)在事件侦听器中,this
是指事件侦听器应用于的元素(currentTarget
)。
参考:https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener the_value_of_this_within_the_handler