在ActionScript 3中,有些类将表示值而不是类本身。很难正确解释我的意思,所以请看这个例子:
var str:String = "something";
var mc:MovieClip = new MovieClip();
trace(str); // something
trace(mc); // [object MovieClip]
您会注意到第一个跟踪输出一个值,而不是[object String]
。在此基础上,我仍然可以使用String
的方法,如下所示:
var ar:Array = str.split('s');
即使在某种程度上你几乎可以阅读上述内容:
"something".split('s');
我有一个类AvLevelData
,它有一些处理级别数据的方法(基本上是一个String)。目前有一个属性data:String
代表核心级数据。
我遇到的问题是 - 我可以复制String的行为,因为当我跟踪或分配AvLevelData
的实例时,结果实际上是字符串data
。
例如,目前我需要去:
var levelData:AvLevelData = new AvLevelData();
trace(levelData.data);
获取数据。我希望能够简单地执行以下操作:
var levelData:AvLevelData = new AvLevelData();
trace(levelData); // some level data string
这可能吗?
答案 0 :(得分:1)
如果你想要追踪自己伪造的字符串,那么你必须在toString()
类上实现AvLevelData
函数。
在上面的示例中,MovieClip
跟踪输出:[Object MovieClip]
;这来自toString()
的默认Object
实施(在Object.prototype
上找到)。注意,你不能覆盖toString()
,因为它只存在于Object
的原型(AS2 / Javascript世界的残余物)上,你需要做的就是提供你自己的同名实现。例如:
public function toString():String {
return "MyCustomObjectString";
}
答案 1 :(得分:1)
一些最基本的类型 - String,int,Number,uint,Boolean,仅举几例 - 本身不是类/对象,它们是基元。在某些语言中,有一些包装类可用于其中一些,因此它们可以被视为对象,尽管Flash并没有根据我的经验这么做。
回答问题的最佳方法可能是为toString()
课程制作AvLevelData
方法:
public function toString():String {
return data;
}
每当你将一个类视为一个字符串(例如将它放在trace()
中)时,flash(以及许多其他语言)都会尝试在该对象上调用toString()。通常,这会导致字符串无效。但是,如果您定义自己的toString()
方法,则可以控制输出的字符串。
另一个选择就是:
trace(AvLevelData.data);
由于该变量是一个字符串,因此它应该跟踪正常。