1

我想知道以下之间的执行速度是否有任何差异:

Object( e.target ).labelTextID

MovieClip( e.target ).labelTextID

在这种情况下, e.target 是一个 MovieClip,但这并不重要。

4

3 回答 3

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
于 2013-09-17T14:28:03.670 回答
1

就您投射的对象类型而言,我无法确定,但就您如何进行投射而言,我会看看这个答案:https ://stackoverflow.com/a/14268394/1346390

它的 TLDR 是,使用“as”进行强制转换,因为它更快更安全,因为如果失败它会抛出 TypeError。

于 2013-09-17T14:25:53.680 回答
0

这个演员表应该没有区别。在这两种情况下,编译器都被指示显式转换 e.target,而不管 e.target 的类型。

于 2013-09-17T14:29:56.937 回答