Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   ООП: проблема переопределения this (https://javascript.ru/forum/misc/15851-oop-problema-pereopredeleniya.html)

NElias 16.03.2011 10:30

ООП: проблема переопределения 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 это исправлено.

Может быть я что-то делаю не так, как будет правильно использовать ООП в таких случаях?

Kolyaj 16.03.2011 10:37

fix_move нормально.

NElias 16.03.2011 12:10

А если что-то подобное, как в питоне:
var Window = function(self) {
    self.title = 'None';

    self.update = function(self, data) {
        self.title = data.title;
    }

    self.move = function(self) {
        $.getJSON('/move/', self.update);
    }
}

B@rmaley.e><e 16.03.2011 14:15

Не знаю, как там в Пайтоне, но в 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) не несет.

NElias 16.03.2011 15:43

Интересное решение, спасибо :)


Часовой пояс GMT +3, время: 19:42.