ООП: проблема переопределения this
Пример:
var Window = function() {
this.title = 'None';
this.update = function(data) {
this.title = data.title;
}
this.move = function() {
$.getJSON('/move/', this.update);
}
this.fix_move = function() {
var mthis = this;
$.getJSON('/move/', function(data) {
mthis.update(data);
});
}
}
Когда вызывается move, то в методе update, подменяется this и уже недоступны поля объекта Window. В fix_move это исправлено. Может быть я что-то делаю не так, как будет правильно использовать ООП в таких случаях? |
fix_move нормально.
|
А если что-то подобное, как в питоне:
var Window = function(self) {
self.title = 'None';
self.update = function(self, data) {
self.title = data.title;
}
self.move = function(self) {
$.getJSON('/move/', self.update);
}
}
|
Не знаю, как там в Пайтоне, но в JS из этого ничего хорошего не выйдет. Лучше так:
var Window = function() {
var self = this;
self.title = 'None';
self.update = function(data) {
self.title = data.title;
}
self.move = function() {
$.getJSON('/move/', self.update);
}
}
self - обычный идентификатор и никакого специального поведения (кроме, пожалуй, window.self) не несет. |
Интересное решение, спасибо :)
|
| Часовой пояс GMT +3, время: 21:20. |