【发布时间】:2011-02-10 14:55:38
【问题描述】:
flash.utils.setTimeout() 状态的文档:
不要使用这种方法,而是考虑 创建一个 Timer 对象,使用 指定的间隔,使用 1 作为 repeatCount 参数(设置 计时器只运行一次)。
有谁知道这样做是否有(显着)优势?当您只需要延迟 1 个呼叫时,使用 setTimeout 会容易得多。
【问题讨论】:
标签: apache-flex actionscript-3
flash.utils.setTimeout() 状态的文档:
不要使用这种方法,而是考虑 创建一个 Timer 对象,使用 指定的间隔,使用 1 作为 repeatCount 参数(设置 计时器只运行一次)。
有谁知道这样做是否有(显着)优势?当您只需要延迟 1 个呼叫时,使用 setTimeout 会容易得多。
【问题讨论】:
标签: apache-flex actionscript-3
setTimeout 实际上使用了一个Timer 子类,SetIntervalTimer,它是一个内部类。您可以通过setTimeout(function ():void { throw "booom"; }, 1); 进行检查。您会在堆栈跟踪中看到它。
因此,我真的看不出有很大的劣势。唯一的区别是,您有 2 个匿名电话,而不是 1 个。 OTOH,在性能关键的情况下,您不应该使用任何一种(除了一个内部计时器)以避免频繁实例化 TimerEvent 对象。
基本上,我认为这是一个品味问题。 Adobe 决定,AS3 事件系统很牛,所以他们推广它。
【讨论】:
计时器:
为您提供更多控制权 注册更多的事件监听器 接收事件而不是 带 setTimeout 的单个
您可以控制开始时间和
重复次数(不是很
对 setTimeout 很有用,因为 this
必须只运行一次,然后运行一次
延迟考虑即时时间
它被称为)
设置超时:
更容易使用
编写更少的代码
参数发送方便;
我更喜欢 Timer 类,但我看到程序员经常使用 setTimeout。
另外,如果你使用的是 Tweening 库,有些支持延迟调用
例如 TweenMax TweenMax.delayedCall(2, myFunction, ["myParam"]);
对于那些说 setTimeout 已被弃用的人来说,这是没有意义的..
http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/utils/package.html#setTimeout%28%29
我相信您在这里看不到任何围绕 setTimeout 的“已弃用”关键字
【讨论】:
setTimeout 在外部 .as 文件中运行良好。
在课堂上使用这个:
import flash.utils.*;
import flash.events.TimerEvent;
【讨论】:
据我了解,setTimeout 在 AS3 中已贬值。我在查找 setTimeout 代码的来源时遇到了一些麻烦,但我也相信清除对 Timer 对象的任何引用比使用 setTimeout 更容易(如果我从 AS2 中没记错的话)。
【讨论】:
如果有新的更强大的方法来实现某事,通常会弃用某事。
是的 setTimeout 在某些情况下更容易设置,但在其他情况下则受到更多限制。
我会使用 Timer 类,因为通常当某些东西被弃用时,这意味着将来某个时候可能会删除对它的支持,然后您的代码将无法工作。
【讨论】:
setTimeout 更好?我同意,Timer 提供了比 setInterval 和 setTimer 更多的可能性,但话又说回来,AVM2 字节码提供了比 ActionScript 更多的可能性:D 我认为 setTimeout 是一个有用的功能。如果没有,我会自己写。对我来说,简洁的代码是一种很好的做法,因为这使它易于阅读和理解。因此,虽然我大体上同意,弃用通常需要认真对待,但就 ActionScript 3 而言,我经常觉得这真的只是一个品味问题。
问题是,Timer 对象根本不准确,并且会受到帧率波动的影响。阅读http://forums.adobe.com/message/892631。我使用Date 对象创建了自己的计时器(称为RealTimer),它更加准确。我建议也这样做。
【讨论】:
setTimeout 在外部 .as 文件中不起作用。
【讨论】: