所以我有一个类,我实例化一个变量回调,如:
public var callback:Function;
到目前为止一切顺利。现在,我想向此类添加一个事件监听器并测试是否存在回调。我这样做:
this.addEventListener(MouseEvent.MOUSE_OVER, function(event:MouseEvent) : void {
if (callback) {
// do some things
}
});
这很好用,不会抛出任何错误,但在我测试回调的任何地方我都收到以下警告:
3553: Function value used where type Boolean was expected.
Possibly the parentheses () are missing after this function reference.
这让我烦恼,所以我试图通过测试null和undefined来摆脱警告。那些导致错误。我也无法将Function实例化为null。
我知道,我知道,真正的程序员只关心错误,而不是警告。如果这种情况得不到解决,我会活下来。但它困扰我! :)我只是神经质,或者实际上是否有某种方法来测试是否在没有IDE婊子的情况下创建了真正的函数?
答案 0 :(得分:6)
类似于使用typeof:
if(callback is Function){
}
我认为如果函数存在并且是函数则应该求值为true,如果它是null或不是函数则应该为false。 (尽管如果不起作用,请尝试if(callback && callback is function){}
答案 1 :(得分:2)
if( !(callback == null)){
// do something
}
答案 2 :(得分:1)
已经有一个有效的答案,但我想我会提到你也可以通过显式地将结果转换为布尔值来停止警告。
if (Boolean(callback)) {
// do something
}
答案 3 :(得分:0)
你试过了吗?
if (typeof callback == "function") {
// do some things
}
http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/operators.html#typeof