“这个”如何在Javascript中运行?

时间:2016-05-27 06:08:33

标签: javascript

我不完全理解this的工作原理。例如,

var logger = {
x: 0,
updateCount: function(){
    this.x++;
    console.log(this.x);
    }
}  

现在,根据我的阅读,当this作为updateCount的属性被调用时,logger的值应为logger。那么为什么下面的代码不起作用呢?

document.querySelector('button').addEventListener('click', logger.updateCount);

另外,为什么这样做?

document.querySelector('button').addEventListener('click', function(){
logger.updateCount();

});

1 个答案:

答案 0 :(得分:0)

在第一个中,您将函数作为参数传递,并在那里调用它。因此呼叫者不会是记录器。而“这”取决于来电者。在第二个,如您所见,您正在从记录器调用该函数,因此“this”是记录器。

您可以按如下方式修改第一个,以便将其“this”设置为logger。

return new ArrayList<>(freqMap1.values()).equals(new ArrayList<>(freqMap2.values()));