Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Web > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 08.08.2016, 22:36   #1
CeHTuJI
Пользователь
 
Регистрация: 26.08.2013
Сообщений: 51
По умолчанию this класса и this функции

Подскажите как правильно реализовать данный код, в onload this обращается непосредственно к img, а не свойствам моего "класса".

PHP код:
    this.Iheight;
    
this.Iwidth;

    

    
this.img.onload = function(){
        
this.Iheight this.img.height;
        
this.Iwidth this.img.width;
    } 
CeHTuJI вне форума Ответить с цитированием
Старый 08.08.2016, 23:34   #2
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,825
По умолчанию

Ну ты обращаешься к методам уже другого объекта...
Логично, что контекст изменяется.
Либо закешируй в переменную старый контекст и обращайся к нему через переменную, либо смени контекст перед выполнением через apply/call/bind, либо юзай стрелочную функцию из ES6.
UPD,
да,
Код:
    this.Iheight;
    this.Iwidth;
это дерьмо не имеет ни малейшего значения.
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 12.08.2016, 19:40   #3
Viconte
Пользователь
 
Регистрация: 31.08.2010
Сообщений: 40
По умолчанию

Сохраним ссылку на контекст выполнения(this) в переменной self.
Когда будет выполняться обработчик onload - он возьмет переменную self из замыкания(она будет ссылаться на Ваш объект)

Код:
    var self = this;
    this.Iheight; 
    this.Iwidth; 

    this.img.onload = function(){ 
        self.Iheight = self.img.height; 
        self.Iwidth = self.img.width; 
    }
А так как у вас идет обработчик загрузки изображения то код можно еще упростить:

Код:
    var self = this;
    this.Iheight; 
    this.Iwidth; 

    this.img.onload = function(){ 
        self.Iheight = this.height; 
        self.Iwidth = this.width; 
    }

Последний раз редактировалось Viconte; 13.08.2016 в 00:45.
Viconte вне форума Ответить с цитированием
Старый 12.08.2016, 23:35   #4
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,825
По умолчанию

Цитата:
Сообщение от Viconte Посмотреть сообщение
Код:
    var self = this;
    this.Iheight; 
    this.Iwidth; 

     

    this.img.onload = function(){ 
        self.Iheight = this.img.height; 
        self.Iwidth = this.img.width; 
    }
а ты скуп на слова... метод onload запустится от лица объекта img, у которого соответственно нет свойства img
Код:
// либо 
self.Iheight = this.height;
// либо 
self.Iheight = self.img.height;
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 13.08.2016, 00:39   #5
Viconte
Пользователь
 
Регистрация: 31.08.2010
Сообщений: 40
По умолчанию

Поправил.
Viconte вне форума Ответить с цитированием
Ответ
Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вызвать функцию класса из функции др класса? mc13 Общие вопросы C/C++ 20 14.02.2015 21:27
Вызов функции из класса mc13 Общие вопросы по Java, Java SE, Kotlin 11 08.02.2015 21:52
Вызов функции из одного класса кнопкой из другого класса lexflax Qt и кроссплатформенное программирование С/С++ 1 12.12.2014 22:48
функции внутри класса... Muvvka C++ Builder 4 24.06.2013 20:58
Обращение к из одной функции класса к другой того же класса,не указывая к какому объекту она относиться zipwind C++ Builder 1 09.04.2011 17:18