Мне очень тяжело заниматься прототипами в JavaScript.
Раньше у меня были проблемы с вызовом чего-то вроде этого:
o = new MyClass();
setTimeout(o.method, 500);
и мне сказали, что я могу это исправить с помощью:
setTimeout(function() { o.method(); }, 500);
И это работает. Теперь у меня другая проблема, и я подумал, что могу решить ее таким же образом, просто добавив анонимную функцию. Моя новая проблема заключается в следующем:
MyClass.prototype.open = function() {
$.ajax({
/*...*/
success: this.some_callback,
});
}
MyClass.prototype.some_callback(data) {
console.log("received data! " + data);
this.open();
}
Я обнаружил, что в теле MyClass.prototype.some_callback
ключевое слово this
не относится к экземпляру MyClass
, для которого был вызван метод, а скорее то, что похоже на запрос jQuery ajax (это объект, содержащий, среди прочего, объект xhr и все параметры моего вызова ajax).
Я пробовал выполнить этот:
$.ajax({
/* ... */
success: function() { this.some_callback(); },
});
, но я получаю сообщение об ошибке:
Uncaught TypeError: Object #
Я не уверен, как это правильно сделать. Я новичок в JavaScript, и концепция прототипов, которые иногда ведут себя как классы, но обычно не работают, действительно сбивает меня с толку.
Итак, как правильно это сделать? ? Я пытаюсь навязать JavaScript парадигму, которой он не принадлежит?