我的代码是

function getID( swfID ){
     if(navigator.appName.indexOf("Microsoft") != -1){
          me = window[swfID];
     }else{
          me = document[swfID];
     }
}

function js_to_as( str ){
     me.onChange(str);
}

然而,有时我的onChange不加载。Firebug错误

我。onChange不是一个函数

我想优雅地降级,因为这不是我的程序中最重要的特性。Typeof给出相同的错误。

关于如何确保它存在,然后只执行onChange有什么建议吗?

(下面的方法除了try catch one work之外都没有)


当前回答

// just pass your tested function name instead of myFunctionName
if ( $.isFunction($.fn.myFunctionName) ) {
    console.log( 'write your code here.' );
}

其他回答

function js_to_as( str ){
     if (me && me.onChange)
         me.onChange(str);
}

没有看到这个建议: 我。onChange && me.onChange(str);

基本上如果我。onChange是未定义的(如果它没有被初始化,它将是未定义的),那么它将不会执行后面的部分。如果我。onChange是一个函数,它将执行me.onChange(str)。

你甚至可以更进一步,这样做:

me && me.onChange && me.onChange(str);

以防我也是异步的。

function isFunction( o ) { return null !== o && "function" === typeof o && !!o.apply; }

我也一直在寻找这个问题的优雅解决方案。经过深思熟虑,我发现这种方法是最好的。

const func = me.onChange ||(str => {}); func(str);

这段简单的jQuery代码应该可以做到:

if (jQuery.isFunction(functionName)) {
    functionName();
}