转换 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());
}
我有一个函数,我接收 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());
}