我有一个函数,我接收地图作为类,一切正常,但当我将其转换为字符串,其中地图类似'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',但它也给出了类似的错误。 那么如何使用或不使用字符串将类名转换为另一个类名并将其传递给构造函数?
答案 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());
}