是否可以从类中获取类的实例名称,而不必手动将实例名称作为字符串参数传递给类构造函数?
//Create New SizeClass
var big:SizeClass = new SizeClass();
//-------------
package
{
public class SizeClass
{
public function SizeClass()
{
trace( //-- Instance Name "big" --// );
}
}
}
答案 0 :(得分:1)
不,在构造函数期间无法了解包含代码块的任何内容,除了可以从堆栈跟踪中学到的内容(尽管除了Flash的调试版之外不可用)。即使您拥有包含类的全局访问点,它仍然不允许该访问。
将构造函数视为方法调用。在AS的一行中,它将在赋值之前被称为。例如:var a:Foo = new Foo()
创建Foo
(构造函数完成),然后a
填充刚刚发生的任何事情。在那之后a
将保持其上下文的不可知性(因为封装),除非它被告知它(在DisplayObject上甚至是这样 - 试试这个(var mc:MovieClip = new MovieClip(); trace( mc.root ) //this will be null
)。
我保留这个,因为它虽然对你原来的答案没用,但是很有用。
您始终可以从getQualifiedClassName
包中获取flash.utils
类的名称。在构建之后很久就无法获得DisplayObject,但是你可以通过(我相信)覆盖function set name( value:String ):void
来模拟它。如果这不起作用,请尝试在Event.ADDED
和/或Event.ADDED_TO_SAGE
之后找到它。
答案 1 :(得分:1)
实例名称不是很重要。您最好将实例的引用存储在数组中。
var sizes:Array = new Array();
var big:SizeClass = new SizeClass();
sizes.push( big );
如果要访问它们,可以遍历数组。
for (var i:uint = 0; i < list.length; ++i)
{
var size:SizeClass = list[i] as SizeClass;
trace( size );
}
BTW:可以为您的班级添加自动索引,而不是实例名称。
package
{
public class SizeClass
{
private static var global_index:int = 0;
public const INDEX:int = global_index ++;
}
}
你可以这样访问:
var big:SizeClass = new SizeClass();
trace(big.INDEX) // 0
var small:SizeClass = new SizeClass();
trace(small.INDEX)// 1