AS3 - 返回类的属性而不是类本身

时间:2011-11-30 06:13:18

标签: actionscript-3 oop

在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

这可能吗?

2 个答案:

答案 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);

由于该变量是一个字符串,因此它应该跟踪正常。