转换 class 名称并传递给另一个 class

converting class name and passing to another class

我有一个函数,我接收 map 作为 Class,一切正常,但是当我将它转换为字符串时,其中 map 类似于 'IconNorth',将其转换为 "FieldNorth" 并尝试传递给另一个 class 构造函数我得到错误。

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]);

}

和董事会 class

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' 但它给出了类似的错误。 那么如何将使用或不使用字符串的 class 名称转换为另一个 class 名称并将其传递给构造函数?

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

使用getQualifiedClassName得到完整的字符串class:

 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());
}