Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.06.2011, 18:08
Аватар для cmygeHm
Профессор
Отправить личное сообщение для cmygeHm Посмотреть профиль Найти все сообщения от cmygeHm
 
Регистрация: 12.10.2010
Сообщений: 196

указатель this
Hello world!
Научите! как быть. Тут и JavaScript и JQuery.
Тема названа так, потому что другого названия придумать не мог. Также жду Ваших вариантов - как можно было назвать тему.
Имеем:
function MyObj () {

    this.func1 = function() {
        console.log(5);
    }
    
    this.func2 = function() {
        this.func1();
    }
    
    this.func3 = function(b) {
        console.log(b);
    }
    
    this.doAjax = function(fn) {
       
       $.ajax({
           url: '/mashines/index/getmashines/format/json',
           dataType: 'json',
           data: {'start': 0, 'limit': 50},
           assync: false,
           success: function(data) {
               fn(data);
           }

        });
   }
   
   this.errorFunc = function() {
       this.doAjax(function(a){
           console.log(a); // выводит отлично!
           this.func3(a); /* а здесь ошибка:
                      Uncaught ReferenceError: func3 is not defined - если без this обращаюсь к func3 и 
                      Object [object DOMWindow] has no method 'func3' - если через this*/
       });
   }
}


var myObj = new MyObj();
myObj.func1(); // вызывается отлично
myObj.func2() //вызывается отлично
myObj.errorFunc(); // бум!


Как я понимаю, при обращении к this.func3 внутри анонимной функции я обращаюсь к this объекта аjax. Там функция func3 не находится и он ищет в prototype объектов выше, и доходит до window! А там его тоже нет! Как же обратиться к методу??? Можно извращаться, но это по-моему не дело:

this.doAjax = function(fn) {
       var self = this;  // сохраняем this в self
       $.ajax({
           url: '/mashines/index/getmashines/format/json',
           dataType: 'json',
           data: {'start': 0, 'limit': 50},
           assync: false,
           success: function(data) {
               // и передаем его в fn
               fn(self, data);
           }

        });
   }
   
   this.errorFunc = function() {
       this.doAjax(function(mySelf, a){
           console.log(a);
           mySelf.func3(a);
       });
   }

Последний раз редактировалось cmygeHm, 28.06.2011 в 18:14.
Ответить с цитированием
  #2 (permalink)  
Старый 28.06.2011, 18:17
Аватар для NoResponse
Профессор
Отправить личное сообщение для NoResponse Посмотреть профиль Найти все сообщения от NoResponse
 
Регистрация: 17.06.2010
Сообщений: 152

например так
function MyObj () {
var self = this;
...
self.func3(a);
Ответить с цитированием
  #3 (permalink)  
Старый 28.06.2011, 18:20
Аватар для cmygeHm
Профессор
Отправить личное сообщение для cmygeHm Посмотреть профиль Найти все сообщения от cmygeHm
 
Регистрация: 12.10.2010
Сообщений: 196

ну как-то так... так себе... близко к тому, что я предложил. а есть еще что-нибудь?
Ответить с цитированием
  #4 (permalink)  
Старый 28.06.2011, 18:59
Профессор
Отправить личное сообщение для nikita.mmf Посмотреть профиль Найти все сообщения от nikita.mmf
 
Регистрация: 01.02.2010
Сообщений: 364

Можно так
$.ajax({
           url: '/mashines/index/getmashines/format/json',
           dataType: 'json',
           data: {'start': 0, 'limit': 50},
           assync: false,
           success: fn,
           context: this
        });

либо вот так
this.doAjax($.proxy(function(a){
           console.log(a); // выводит отлично!
           this.func3(a); 
       }, this));
Ответить с цитированием
  #5 (permalink)  
Старый 29.06.2011, 11:20
Аватар для cmygeHm
Профессор
Отправить личное сообщение для cmygeHm Посмотреть профиль Найти все сообщения от cmygeHm
 
Регистрация: 12.10.2010
Сообщений: 196

ага! сейчас затестим спасибо всем
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как программно подвинуть указатель мыши Иваннн Элементы интерфейса 6 15.04.2011 16:48
Указатель this Golovastik Серверные языки и технологии 2 20.11.2010 01:46
Как получить указатель на элемент вызвавший функцию pelayo Общие вопросы Javascript 9 29.06.2010 23:32
bind: как передать функции указатель на объект trial jQuery 4 25.05.2010 01:35
Можно ли установить указатель мыши в любое место окна браузера? DVVID Events/DOM/Window 8 24.02.2010 12:37