2011-11-30 19 views
0

在ActionScript 3,有一些类,将代表一个值,而不是类本身。很难正确地明白我的意思解释,所以借这个例子:AS3 - 选举一类的属性,而不是类本身

var str:String = "something"; 
var mc:MovieClip = new MovieClip(); 

trace(str); // something 
trace(mc); // [object MovieClip] 

你会发现第一个跟踪输出值,而不是[object String]。 ontop的这一点,我仍然可以使用的String方法,像这样:

var ar:Array = str.split('s'); 

即使在某种程度上,你几乎可以读取上面:

"something".split('s'); 

我有一个类AvLevelData那有一些处理关卡数据的方法(本质上是一个String)。目前有一个属性data:String,它表示核心级别的数据。

我的问题是 - 我可以复制字符串的行为,当我跟踪或分配AvLevelData的实例时,结果实际上是字符串data

例如,在现阶段,我需要去:

var levelData:AvLevelData = new AvLevelData(); 
trace(levelData.data); 

获取数据。我反而希望能够简单地做到以下几点:

var levelData:AvLevelData = new AvLevelData(); 
trace(levelData); // some level data string 

这可能吗?

回答

1

如果您不想追查自己制作的字符串,那么您必须在AvLevelData类上实现toString()函数。

在上面的例子中,MovieClip跟踪输出:[Object MovieClip];这个来自默认toString()实施Object(上Object.prototype找到)。请注意,不能覆盖toString(),因为它只是对Object(AS2的/ JavaScript的世界的遗迹)的原型存在,所有你需要做的是提供您自己的实现具有相同的名称。例如:

public function toString():String { 
    return "MyCustomObjectString"; 
} 
+0

完美 - 感谢您为什么不需要使用'override'来实现这个简洁的解释 - 这会引起我一些头疼的问题。 – Marty

+0

没问题!有趣的是:'prototype'在AS3中仍然有效,例如,您可以为* all *'Object'实例创建一个* custom *默认'toString()'实现。例如,试试这个:Object.prototype = function():String {return“DefaultString”}'。现在,当您追踪普通的'MovieClip'(或任何其他'Object')实例时,它将返回'DefaultString'。注意:通常非常不推荐向原型中的标准函数提供替代实现;但这是一个很好的教育例子。 – Peter

1

一些最基本的类型 - 字符串,整数,数,UINT,布尔,仅举几例 - 不是类/对象本身,他们是原语。在某些语言中,有一些包装类可用于其中的一些,所以它们可以像对象一样对待,尽管Flash并没有从我的经验中做到这一点。

可能回答你的问题的最好办法是让一个toString()方法为您AvLevelData类:

public function toString():String { 
    return data; 
} 

你把一个类的字符串(例如,将其置于trace())任何时间,闪光(和许多其他语言)尝试在对象上调用toString()。通常这会产生一个没有用的字符串。但是如果你定义了自己的toString()方法,你可以控制输出的字符串。

另一种选择是简单地做:

trace(AvLevelData.data); 

自变量是一个字符串,它应跟踪就好了。

相关问题