我想知道执行速度是否存在差异:
Object( e.target ).labelTextID
和
MovieClip( e.target ).labelTextID
e.target在这种情况下是一个MovieClip,但没关系。
答案 0 :(得分:2)
没有任何区别。看看这个示例代码:
var obj:Object = new MovieClip();
var v1:Object = Object(obj);
var v2:MovieClip = MovieClip(obj);
两种类型的铸件都产生相同的操作码:
_as3_findpropstrict Object
_as3_getlocal <1>
_as3_callproperty Object(param count:1)
_as3_coerce Object
_as3_setlocal <2>
_as3_findpropstrict flash.display::MovieClip
_as3_getlocal <1>
_as3_callproperty flash.display::MovieClip(param count:1)
_as3_coerce flash.display::MovieClip
_as3_setlocal <3>
结论也得到了基准的证实:
var obj:Object = new MovieClip();
var v1:Object, v2:MovieClip, i:int;
var t:uint = getTimer();
for(i = 0; i < 1000000; i++)
v1 = Object(obj);
trace("Object: ", (getTimer() - t));
t = getTimer();
for(i = 0; i < 1000000; i++)
v2 = MovieClip(obj);
trace("MovieClip: ", (getTimer() - t));
输出:
Object: 92
MovieClip: 90
答案 1 :(得分:1)
就你投射到什么类型的物体而言,我无法确定,但就你如何进行投射而言,我会看一下这个答案:https://stackoverflow.com/a/14268394/1346390
它的TLDR,使用“as”进行强制转换,因为它更快更安全,因为如果失败会抛出TypeError。
答案 2 :(得分:0)
这个演员之间必须没有区别。在这两种情况下,无论e.target的类型如何,都指示编译器显式地转换e.target。