首页 > 解决方案 > 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代替吗?

标签: javascript

解决方案


可以为函数赋予this与默认值不同的范围。您可以使用方法自己执行apply操作。(编辑:正如@pilchard 在下面指出的那样,这不适用于继承父范围的箭头函数。)在事件侦听器中,this指的是事件侦听器应用于的元素(currentTarget)。

参考:https ://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#the_value_of_this_within_the_handler


推荐阅读