转换类名并传递给另一个类

时间:2015-12-01 23:29:48

标签: actionscript-3 flash

我有一个函数,我接收地图作为类,一切正常,但当我将其转换为字符串,其中地图类似'IconNorth',将其转换为“FieldNorth”并尝试传递给另一个类构造函数我得到错误。

public function newMap(map, x1:int, y1:int):void {
    var createMap = new map();
    list.push(createMap);
    addChild(createMap);
    var field = map.toString().split("Icon").join("Field");
    new Board(this[field]);

}

和董事会成员

public class Board extends MovieClip {

public static var list:Array = new Array();

public function Board(field=null) {
    list.push(this);
    if  (field!=null) {
        addChild(new field());
    }
}
...

错误是

ReferenceError: Error #1069: Property [class FieldNorth] not found on Map and there is no default value.

我也试过'getDefinitionByName',但它也给出了类似的错误。 那么如何使用或不使用字符串将类名转换为另一个类名并将其传递给构造函数?

1 个答案:

答案 0 :(得分:0)

首先,您需要获取完整的课程,因此您不能只使用CLass.toString() - 在您的情况下会生成字符串:"[class FieldNorth]"

使用getQualifiedClassName获取完整的字符串类:

 var classStr:String = flash.utils.getQualifiedClassName(map);

然后,为了反过来,你必须使用getDefinitionByName

var myClass:Class = flash.utils.getDefinitionByName(classStr) as Class  
var inst = new myClass();

因此,对于您的示例,这就是您的代码应该是这样的:

public function newMap(map:Class, x1:int, y1:int):void {
    var createMap:Object = new map();
    list.push(createMap);
    addChild(createMap);

    var fieldClassStr:String = flash.utils.getQualifiedClassName(map).replace("Icon","Field");

    try { //if getDefinitionByName fails, it will throw an exception, not return null
        var field:Class = flash.utils.getDefinitionByName(fieldClassStr) as Class  
        new Board(field);
    }catch(e:Error){}
}
public function Board(field:Class) {
    list.push(this);
    addChild(new field());
}