ActionScript - 从构造函数获取实例名称而不传递参数?

时间:2010-11-15 15:08:16

标签: actionscript-3 constructor instance

是否可以从类中获取类的实例名称,而不必手动将实例名称作为字符串参数传递给类构造函数?

//Create New SizeClass
var big:SizeClass = new SizeClass();

//-------------

package
{
public class SizeClass
     {
     public function SizeClass()
          {
          trace( //-- Instance Name "big" --// );
          }
     }
}

2 个答案:

答案 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

来源:http://blog.stroep.nl/2010/08/auto-increment-as3-class/