如何测试一个Function变量是否被设置?
2011-07-01更新:smithfox提醒,这个BUG在Flex SDK4.5/Flash Player 10.3中已经解决(不知道是从什么时候解决的,只能把我发现时候的版本贴出来),Adobe解决的办法也比较BT,就是不带括号调用方法名,不会执行方法。这样的话,以前偷懒的代码都要改过了。
A类需要调用B类中的showInfo方法,使用setShowInfo方法将被调用的方法保存在A类的 _showInfo
变量中,然后在调用该方法的时候判断该方法是否被设置,如果被设置就调用它。代码如下:
1private var _showInfo:Function;
2public function setShowInfo($showInfo:Function):void
3{
4 _showInfo = $showInfo;
5}
6protected function showInfo($msg:String):void
7{
8 trace('_showInfo is not null:', _showInfo != null);
9 if(_showInfo != null)
10 _showInfo($msg);
11}
但这个代码有很大的问题,trace出来的内容居然是:
_showInfo is not null:false
想了想也对,因为 _showInfo
是方法,对方法进行调用(即使不带括号也可以调用),方法是有返回值的,而这个方法的并没有设定返回值(设定为void),也就是说返回值为空,这样就导致了即使_showInfo被设置, _showInfo != null
表达式也会返回空。
至于解决办法,也很简单(setShowInfo就省略了):
1private var _showInfo:Function;
2protected function showInfo($msg:String):void
3{
4 trace('_showInfo is Function:', _showInfo is Function);
5 if(_showInfo is Function)
6 _showInfo($msg);
7}
- 文章ID:1165
- 原文作者:zrong
- 原文链接:https://blog.zengrong.net/post/test-if-function-variable-be-set/
- 版权声明:本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可,非商业转载请注明出处(原文作者,原文链接),商业转载请联系作者获得授权。