Как получить доступ через this к другим методам? Вот есть у меня такой код 1)DialogSheet - функция конструктор объявленная ранее. И я через прототип записал ей метод. 2) еще в прототип этой функции я записал другие методы. К примеру метод preloaderHide Проблема в том, что preloaderHide находится внутри другой функции. И поэтому this больше не ссылается на функцию конструктор и я получаю ошибку. Как можно решишь эту проблему? у меня пришло на ум только объявить в начале метода какую то переменную и присвоить ей this а потом через нее ссылаться - но может есть какое то более правильное решение?DialogSheet.prototype.load = function() { this.preloaderShow(); $.post("date.php", { dialog_sheet: true }, function(data) { this.preloaderHide(function() { if (data) { try { var result = JSON.parse(data); for (var i = 0; i < result.length; i++) { var id = result[i]['id']; var name = result[i]['name']; var img = result[i]['avatar']; var allMsg = result[i]['all_messages']; var newMsg = result[i]['new_messages']; var status = result[i]['online']; var dialog = new Dialog(id, name, img, allMsg, newMsg, status); dialog.render(); } } catch (err) { console.error('ошибка данных'); console.log(err); } } else { this.emptyTitleRender(); } }); }); };
Для решения проблемы с потерей контекста при использовании метода preloaderHide внутри функции обратного вызова, можно сохранить ссылку на this в переменной перед началом выполнения функции post(). Например, можно использовать переменную self или that:
DialogSheet.prototype.load = function() { var self = this; // сохраняем this в переменной self this.preloaderShow(); $.post("date.php", { dialog_sheet: true }, function(data) { self.preloaderHide(function() { // используем self вместо this if (data) { try { var result = JSON.parse(data); for (var i = 0; i < result.length; i++) { var id = result[i]['id']; var name = result[i]['name']; var img = result[i]['avatar']; var allMsg = result[i]['all_messages']; var newMsg = result[i]['new_messages']; var status = result[i]['online']; var dialog = new Dialog(id, name, img, allMsg, newMsg, status); dialog.render(); } } catch (err) { console.error('ошибка данных'); console.log(err); } } else { self.emptyTitleRender(); } }); }); };
Используя такой подход, вы будете иметь доступ к методам объекта DialogSheet через переменную self внутри функции обратного вызова.
Для решения проблемы с потерей контекста при использовании метода preloaderHide внутри функции обратного вызова, можно сохранить ссылку на this в переменной перед началом выполнения функции post(). Например, можно использовать переменную self или that:
DialogSheet.prototype.load = function() {
var self = this; // сохраняем this в переменной self
this.preloaderShow();
$.post("date.php", {
dialog_sheet: true
}, function(data) {
self.preloaderHide(function() { // используем self вместо this
if (data) {
try {
var result = JSON.parse(data);
for (var i = 0; i < result.length; i++) {
var id = result[i]['id'];
var name = result[i]['name'];
var img = result[i]['avatar'];
var allMsg = result[i]['all_messages'];
var newMsg = result[i]['new_messages'];
var status = result[i]['online'];
var dialog = new Dialog(id, name, img, allMsg, newMsg, status);
dialog.render();
}
} catch (err) {
console.error('ошибка данных');
console.log(err);
}
} else {
self.emptyTitleRender();
}
});
});
};
Используя такой подход, вы будете иметь доступ к методам объекта DialogSheet через переменную self внутри функции обратного вызова.