| tofflife |
26.09.2011 15:35 |
Возвращаясь к теме вопроса.
static-переменные в отладчике Flash видны только из статических методов, поскольку отладчик флеш отображает переменные только для текущего прототипа объекта, а на статические составляющие создается отдельный прототип класса. Для просмотра статических переменных, создайте статический метод и вызываейте его вот так:
Код AS3:
public class SomeClass{
private var m_objectVar:Object = new Object();
private static var ms_classVar:Object = new Object();
private function doSomething():void{
trace("dynamic debug now...");//Видна m_objectVar
SomeClass.testVars();
}
private static function testVars():void{
trace("static debug now....");//Сюда ставим бреак поинт. Видим, что видна ms_ClassVar.
}
}
И ещё. Хранить статические переменные и классы для глобальных вещей - не айс. Если архитектура будет расширяться, то их, возможно, придетсья свитчить на другие типы. Лучше делать это через синглтоны.
Вот так, было:
Код AS3:
public class GlobalVars{
private static var ms_variable:Number;
private static var ms_variable2:String;
public static function getVariable():Number{
return ms_variable;
}
public static function getVariable2():String{
return ms_variable2;
}
}
//....
var value:Number = GlobalVars.getVariable();//Жесткая перивязка к классу
А стало:
Код AS3:
public class GlobalVarsController implements IGlobalVarsController{
private static var ms_instance;
private static var ms_variable:Number;
private static var ms_variable2:String;
public function getVariable():Number{
return m_variable;
}
public function getVariable2():String{
return m_variable2;
}
public static function getInstance():IGlobalVarsController{
if (ms_instance == null){
ms_instance = new GlobalVarsController();
}
return ms_instance;
}
}
///....
var globalController:IGlobalVarsController = GlobalVarsController.getInstance();
//Либо так: var globalController:IGlobalVarsController = Factory.GetController("GlobalVars");
//Как видно, здесь мы можем оперировать одним интерфейсом, что вводит гибкость в архитектуру.
var value:Number = globalController.getVariable();//Нежесткая привязка, мы работаем с интерфейсом, а не с классом
Надеюсь, я помог.
|