javascript - JavaScript 中的“this”指的是什么?
问题描述
我编写了一个函数来为所有匹配特定选择器的元素添加侦听器,如下所示:
// 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并在“类上下文”中说,非静态函数中的“this”是指为当前类对象,否则默认为全局对象,在浏览器中应为窗口对象。
那么,由于监听函数不是类成员函数,它应该引用window代替吗?
解决方案
可以为函数赋予this
与默认值不同的范围。您可以使用方法自己执行此apply
操作。(编辑:正如@pilchard 在下面指出的那样,这不适用于继承父范围的箭头函数。)在事件侦听器中,this
指的是事件侦听器应用于的元素(currentTarget
)。
推荐阅读
- image - 404 在 Safari 上,但在 Chrome 中使用图像时很好
- javascript - 在反应应用程序中使用符号时出错
- java - Java:使用三元检查setter中的null
- json - java.lang.Integer 类型的值无法转换为 JSONObject
- javascript - 如何为表中的删除行包含不同的警报?
- android-studio - 如何解决 Flutter 控制台中的“目标在我们附加之前死亡”消息?
- sequelize.js - Sequelize 单表查询 - 关系不存在
- python - 通过拟合实验数据估计复杂微分方程组参数时如何增加预测数据?
- 3d-reconstruction - 计算机图形学中的亚体素是什么意思?
- python - 手动操作不适用于 selenium webdriver