Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.03.2011, 10:30
Новичок на форуме
Отправить личное сообщение для NElias Посмотреть профиль Найти все сообщения от NElias
 
Регистрация: 16.03.2011
Сообщений: 3

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

Может быть я что-то делаю не так, как будет правильно использовать ООП в таких случаях?
Ответить с цитированием
  #2 (permalink)  
Старый 16.03.2011, 10:37
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

fix_move нормально.
Ответить с цитированием
  #3 (permalink)  
Старый 16.03.2011, 12:10
Новичок на форуме
Отправить личное сообщение для NElias Посмотреть профиль Найти все сообщения от NElias
 
Регистрация: 16.03.2011
Сообщений: 3

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

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

    self.move = function(self) {
        $.getJSON('/move/', self.update);
    }
}
Ответить с цитированием
  #4 (permalink)  
Старый 16.03.2011, 14:15
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Не знаю, как там в Пайтоне, но в 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) не несет.
Ответить с цитированием
  #5 (permalink)  
Старый 16.03.2011, 15:43
Новичок на форуме
Отправить личное сообщение для NElias Посмотреть профиль Найти все сообщения от NElias
 
Регистрация: 16.03.2011
Сообщений: 3

Интересное решение, спасибо
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с Popup окном vovuslik jQuery 5 12.06.2010 16:12
Проблема с дизайном после отправки xmlhttprequest, Проблема с дизайном после отправки cyberx AJAX и COMET 3 01.05.2010 17:07
Проблема, в менюшке Большой джо Элементы интерфейса 0 12.07.2009 17:12
Проблема спама lliberty AJAX и COMET 1 12.03.2009 16:47
проблема с ООП scuter Общие вопросы Javascript 19 23.03.2008 22:48