javascript - 为什么 "this"会得到不同的值?

标签 javascript function object this

var foo = {
    data: "a",
    print: function() {console.log(this.data)}
}

element.addEventListener("click", function(){foo.print()});

在这种情况下上下文是 foo 对象

element.addEventListener("click", foo.print);

在这一个中它是 element

为什么会这样?

最佳答案

this 的值由调用函数的方式决定。在第一种情况下,“print”函数是通过对象“foo”的属性引用调用的。因此,this 的值是对该对象的引用。

在第二种情况下,您在设置事件处理程序时已将对“打印”函数的引用传递给系统。调用事件处理程序时将 this 设置为引用事件中涉及的元素。

在您的第一个示例中,匿名函数中 this 的值也将是对被单击元素的引用。如果您愿意,可以将其传输到“打印”功能:

element.addEventListener("click", function(){ foo.print.call(this); });

关于javascript - 为什么 "this"会得到不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21968886/

相关文章:

JavaScript 将小数转换为整数

Python 从类中获取值

javascript - 使用 DefineProperty 进行获取/设置

javascript - jQuery UI position() 不重新定位元素

javascript - 使用 IIFE 并传入参数,我应该什么时候这样做? JavaScript

javascript - 为什么源 map 不起作用?

php - 不能使用函数返回值

javascript - 获取子属性

javascript - 我怎样才能像 jQuery 一样在函数内部做变量对象?

javascript - 按日期对数组排序 - javascript