我想知道以下之间的执行速度是否有任何差异:
Object( e.target ).labelTextID
和
MovieClip( e.target ).labelTextID
在这种情况下, e.target 是一个 MovieClip,但这并不重要。
我想知道以下之间的执行速度是否有任何差异:
Object( e.target ).labelTextID
和
MovieClip( e.target ).labelTextID
在这种情况下, e.target 是一个 MovieClip,但这并不重要。
没有任何区别。看看这个示例代码:
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
就您投射的对象类型而言,我无法确定,但就您如何进行投射而言,我会看看这个答案:https ://stackoverflow.com/a/14268394/1346390
它的 TLDR 是,使用“as”进行强制转换,因为它更快更安全,因为如果失败它会抛出 TypeError。
这个演员表应该没有区别。在这两种情况下,编译器都被指示显式转换 e.target,而不管 e.target 的类型。