Просмотр полной версии : проблема с видимостью переменной во вложенном функции
darksranger
27.09.2008, 01:57
вобщем такая ситуация
class ... {
public samePeremen:Number = 1
public function .... (){
xml .....
xml.onLoad = function () {
.....
trace (samePeremen) // undefined
}
}
переменная не видна во вложенной функции
конечно можно использовать delegate, в некоторых функциях передавать напрямую, но все это не то, как то можно определить переменную, которая бы была видна во всех методах\функциях ?
PS код схематичный, но думаю смысл вопроса понятен
Спасибо !
Так объявите ее как положено. Положено с 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, чего и вам советую !
Блин, месяц попишешь на АС3 и забываешь АС2 как страшный сон... Да, конечно в АС2 Делегата надо, я совсем забыл, извините.
Psycho Tiger
27.09.2008, 15:48
Неужели AS3 для кодера на AS2 кажется раем? )
Не знаю... В АС2 я сражался с флэшем, чтобы заставить его делать так, как я хочу.
АС3 смотрит на меня умными глазами, словно говорит "Чего желаете, хозяин? Щас всё сделаем!"))))))))
Да, "рай" - наиболее подходящее слово.
Наверно потому, что я не "кодер на АС2", а обычный дизайнер))))
darksranger
27.09.2008, 20:04
ну у меня просто активный проэкт на АС2 и времени его переписывать на АС3 нету :(
а так я бы с удовольствием на АС3 все писал, буквально после закрытия этого проэкта, сяду для переписки всех наработок в АС3 :)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.