2016-05-27 18 views
-3

我不完全了解this是如何工作的。例如,`this`如何在Javascript中工作?

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

现在,从我读过,当updateCount被称为的logger属性的this值应为logger。那么为什么下面的代码不工作?

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

此外,为什么这样工作?

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

});

+0

尝试读取这里:http://javascriptissexy.com/understand-javascripts-this-with-clarity-and-master-it/ – PaolaG

+0

Developper阅读[这里](HTTPS://developer.mozilla。组织/ EN-US /文档/网络/的JavaScript /参考/运营/本)。 –

回答

0

在第一个,你传递一个函数作为参数,它在那里被调用。因此,调用者不会是记录器。 “这”取决于来电者。在第二个,你可以看到,你正在从记录器调用函数,所以“this”是记录器。

您可以修改第一个,如下所示,以便将其“this”设置为记录器。

document.querySelector('button').addEventListener('click', logger.updateCount.bind(logger)); 
相关问题