2016-05-27 2 views
-3

Я не совсем понимаю, как работает this. Например,Как это работает в Javascript?

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(); 

});

+0

Попробуйте прочитать здесь: http://javascriptissexy.com/understand-javascripts-this-with-clarity-and-master-it/ – PaolaG

+0

Developper чтение [здесь] (https: //developer.mozilla. орг/EN-US/Docs/Web/JavaScript/Справка/Операторы/это). –

ответ

0

В первом вы передаете функцию как параметр и вызывается там. Поэтому вызывающий абонент не будет регистрировать. И «это» зависит от вызывающего. На втором, как вы можете видеть, вы вызываете функцию из регистратора, поэтому «это» является регистратором.

Вы можете изменить первый вариант следующим образом, чтобы его «это» задано как регистратор.

document.querySelector('button').addEventListener('click', logger.updateCount.bind(logger)); 
Смежные вопросы