Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обращения между функциями класса 
V
    Опции темы
anthonyBoard
Дата 6.12.2008, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.8.2008
Где: Russia, Obninsk

Репутация: нет
Всего: нет



Добрый день!

Подскажите, пожалуйста, как можно вызывать функции внутри класса в следующем случае:

Код

someclass = function(){
   var timeout = null;

   function somefunc_1(){
     ...
     window.clearInterval(timeout);
     timeout = window.setInterval(somefunc_2, 1);
   }

   function somefunc_2(){
      ...
      window.clearInterval(timeout);
      somefunc_3(); // Эта функция не вызывается, догадываюсь почему, но как грамотно испарвить, чтобы она заработала?
      ...
   }

   function somefunc_3(){
      ...
   }
}

some = new Someclass();
some.somefunc_1();


Не буду отрицать, то что тут вообще некрасиво описан класс, и буду очень признателен, если кто-нибудь покажет как это сделать правильно.

А с функцией проблема следующая, после вызова одной функции класса запускается таймер и с заданным интервалом вызывает другую функцию тогоже класса, но JavaScript ругается, что функции (somefunc_3()) такой нет. Т.е. на сколько я понимаю, когда функция вызывается таймером, она работает, как бы скажем, от лица window, а не из класса, и поэтому внутреннии функции класса становятся недоступны.
Можно конечно хенделы передавать, но может есть какое-нибудь более хорошее решение?

Заранее премного благодарен за помощь! (а пока попробую интервалы без window вызывать)

Это сообщение отредактировал(а) anthonyBoard - 6.12.2008, 13:51
PM MAIL   Вверх
ksnk
Дата 6.12.2008, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



  • javascript - регистрозависимый язык
    Код

    someclass = function(){ ...

    и 
    Код

    some = new Someclass();

     - разные someclass'ы
  •  чтобы писать some.somefunc_1  нужно, к примеру, дописать в конце инициализатора класса
    Код

     this. somefunc_1= somefunc_1;




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
anthonyBoard
Дата 9.12.2008, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.8.2008
Где: Russia, Obninsk

Репутация: нет
Всего: нет



Про регистрозависимость - это просто опечатался, когда писал тут.

Но вот набросал функцию, по смыслу ее думаю понятно будет, что мне надо, но она не работает (и пока как это исправить, не знаю):
Код

Someclass = function(){
    
    this.timer = null;
    
    this.somefunc_1 = somefunc_1;
    this.somefunc_2 = somefunc_2;
    this.somefunc_3 = somefunc_3;
    
    function somefunc_1(){
        clearInterval(this.timer);
        this.timer = setInterval(this.somefunc_2, 1000);
    }
    function somefunc_2(){
        clearInterval(this.timer);
        this.somefunc_3();
    }
    function somefunc_3(){
        alert('done');
    }
}

someclass = new Someclass();
someclass.somefunc_1();


Буду признателен, за помощь!

Добавлено через 9 минут и 4 секунды
Даже поправлюсь немного, необходимо чтобы работало следующее:
Код

Someclass = function(){
    
    this.timer = null;
    
    this.somefunc_1 = somefunc_1;
    this.somefunc_2 = somefunc_2;
    this.somefunc_3 = somefunc_3;
    
    function somefunc_1(){
        clearInterval(this.timer);
        this.timer = setInterval(somefunc_2, 1000);
    }
    function somefunc_2(){
        clearInterval(this.timer);
        this.somefunc_3();
    }
    function somefunc_3(){
        alert('done');
    }
}

someclass = new Someclass();
someclass.somefunc_3 = function(){
    alert('done from outside');
}
someclass.somefunc_1();

PM MAIL   Вверх
ksnk
Дата 9.12.2008, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



    function somefunc_1(){
        clearInterval(this.timer);
        var self=this ; // замыкание, называется...
        this.timer = setInterval(function(){self.somefunc_2();}, 1000);
    }




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
anthonyBoard
Дата 9.12.2008, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.8.2008
Где: Russia, Obninsk

Репутация: нет
Всего: нет



Excellent! То что надо!

Спасибо огромное!

Это сообщение отредактировал(а) anthonyBoard - 9.12.2008, 14:18
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0659 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.