2016-05-27 19 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)); 
相關問題