Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   проблема с видимостью переменной во вложенном функции (http://www.flasher.ru/forum/showthread.php?t=116342)

darksranger 27.09.2008 01:57

проблема с видимостью переменной во вложенном функции
 
вобщем такая ситуация

Код:

class ... {
  public samePeremen:Number = 1
  public function .... (){
          xml  .....
          xml.onLoad = function () {
                .....
                  trace (samePeremen) // undefined
          }
 
  }

переменная не видна во вложенной функции

конечно можно использовать delegate, в некоторых функциях передавать напрямую, но все это не то, как то можно определить переменную, которая бы была видна во всех методах\функциях ?

PS код схематичный, но думаю смысл вопроса понятен
Спасибо !

Wolsh 27.09.2008 02:20

Так объявите ее как положено. Положено с var ))
Впрочем это Вы наверно здесь поспешили. Вобщем просто так не надо делать. Безымянные вложенные функции в классе - самое страшное зло. Надо назначить нормальную приват функцию-обработчик, с именем и в теле класса.
Код:

class ... {
  public var samePeremen:Number = 1
  public function .... (){
          xml  .....
          xml.onLoad = xmlIsLoaded;
  }
  private function xmlIsLoaded (ok:Boolean) {
          .....
          trace (samePeremen) // undefined ?
  }
}


darksranger 27.09.2008 03:08

Wolsh Приветствую!
как вы правильно заметили, я просто поторопился
( знаю, что самое зло :) уже собственно делегэйтом обошелся, просто переписываю старые наработки в классы и натыкаюсь на артефакты :))))

да и кстате
Код:

class ... {
  public var samePeremen:Number = 1
  public function .... (){
          xml  .....
          xml.onLoad = xmlIsLoaded;
  }
  private function xmlIsLoaded (ok:Boolean) {
          .....
          trace (samePeremen) // undefined ? - true
  }


а вот так


class ... {
  public var samePeremen:Number = 1
  public function .... (){
          xml  .....
          xml.onLoad = mx.utils.Delegate.create(this, xmlIsLoaded);
  }
  private function xmlIsLoaded (ok:Boolean) {
          .....
          trace (samePeremen) // undefined ? - false :) тоесть 1 :)
  }
}
}

но мало ли кому то нужно будет, конечно лучше через delegate !!!, но мало ли ( всякое бывает ) можно сделать так

Код:

class ... {
  public samePeremen:Number = 1
  public function .... (){
          xml  .....
          var _samePeremen:Number = samePeremen
          xml.onLoad = function () {
                .....
                  trace (_samePeremen) // 1
          }
 
  }

тоесть на сколько я понял, видимость распостроняется на один, так сказать уровень, тоесть переменная объявленная в методе, будет доступна, в функции в этом методе :), как то так :) но сам я решил, все через delegate, чего и вам советую !

Wolsh 27.09.2008 11:58

Блин, месяц попишешь на АС3 и забываешь АС2 как страшный сон... Да, конечно в АС2 Делегата надо, я совсем забыл, извините.

Psycho Tiger 27.09.2008 15:48

Неужели AS3 для кодера на AS2 кажется раем? )

Wolsh 27.09.2008 16:42

Не знаю... В АС2 я сражался с флэшем, чтобы заставить его делать так, как я хочу.
АС3 смотрит на меня умными глазами, словно говорит "Чего желаете, хозяин? Щас всё сделаем!"))))))))
Да, "рай" - наиболее подходящее слово.
Наверно потому, что я не "кодер на АС2", а обычный дизайнер))))

darksranger 27.09.2008 20:04

ну у меня просто активный проэкт на АС2 и времени его переписывать на АС3 нету :(
а так я бы с удовольствием на АС3 все писал, буквально после закрытия этого проэкта, сяду для переписки всех наработок в АС3 :)


Часовой пояс GMT +4, время: 17:17.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.