У меня есть этот тактовый объект:обратного вызова с `this` путаницей
var Clock = {
start: function() {
$('#btnScrollPause').show();
$('#btnScrollResume').hide();
advance();
this.interval = setInterval(function() {
advance();
}, 5000);
},
pause: function() {
$('#btnScrollPause').hide();
$('#btnScrollResume').show();
this.reset();
},
resume: function() {
if (!this.interval) {
this.start();
}
},
reset: function() {
clearInterval(this.interval);
delete this.interval;
}
};
У меня есть две кнопки, приостанавливать и возобновлять автоматическую прокрутку элемента, но моя путаница на обработчиках кликов, которые я прикрепленные к их.
Если я вызываю функцию паузы, как это:
// 1
$('#btnScrollPause').click(function() {
Clock.pause();
});
Он работает правильно, но если я пытаюсь сократить код следующим образом:
// 2
$('#btnScrollPause').click(Clock.pause);
Он больше не работает, и я получаю error "this.reset не определен". Кроме того, если я сделаю функцию и использую ее в обработчике кликов, то:
// 3
$('#btnScrollPause').click(scrollPause);
function scrollPause() {
Clock.pause();
}
Это работает! Может кто-нибудь объяснить, почему 1 и 3 работают, но 2 нет?
Пример-2. Внутри вашей функции 'pause' это' означает '# btnScrollPause', а не ваш объект' Clock'. Так как '# btnScrollPause' не имеет функции с именем' reset', вы получаете ошибку – bassxzero
Два связанных (возможно, обмана?) Вопросов и ответов с большим количеством полезной информации по этой теме: [Как работает ключевое слово this?] (Http : //stackoverflow.com/questions/3127429/how-does-the-this-keyword-work) и [Как получить доступ к правильному 'this'/context внутри обратного вызова?] (http://stackoverflow.com/questions/20279484/how-to-access-the-correct-this-context-in-a-callback) –
Теперь кажется очевидным – JB06