我的代码是

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之外都没有)


当前回答

我更喜欢使用lodash库,如下所示(看起来更干净):

if (_.has(me, "onChange")) {
   // your desired code here
}

// or generic one like

if (_.has(this, "some property or function name")) {
   // your desired code here
}

其他回答

我将进一步确认这个属性确实是一个函数

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

如果你正在检查一个函数是否是jQuery插件,你需要使用$.fn.myfunction

if (typeof $.fn.mask === 'function') {
    $('.zip').mask('00000');
}

我有这样的情况,函数的名称根据添加到函数名中的变量(在本例中为var 'x')而变化。如此:

if ( typeof window['afunction_'+x] === 'function' ) { window['afunction_'+x](); } 

试试typeof——用'undefined'表示它不存在,用'function'表示函数。这段代码的JSFiddle

function thisishere() {
    return false;
}
alert("thisishere() is a " + typeof thisishere);
alert("thisisnthere() is " + typeof thisisnthere);

或作为if:

if (typeof thisishere === 'function') {
    // function exists
}

或者在一行中返回一个值:

var exists = (typeof thisishere === 'function') ? "Value if true" : "Value if false";
var exists = (typeof thisishere === 'function') // Returns true or false

我怀疑我没有正确地分配onload。

将get_ID调用移动到onclick事件中应该会解决这个问题。

显然,你可以进一步陷阱,如前所述:

function js_to_as( str) {
  var me = get_ID('jsExample');
  if (me && me.onChange) {
    me.onChange(str);
  }
}