javascript - 如何判断一个 JavaScript 函数是否被定义?

标签 javascript

我想检查一个函数是否被定义(我不关心如何,我的意思是它是可调用的)

示例代码:

var functions = {
    'alert':'alert',
    'undefinedFunction':'undefinedFunction',
    'ff.showAlert':'ff.showAlert'
};

var ff = {
    showAlert: function() {
        alert('the function works');
    }
};

for (i in functions) {
    console.log(i+' : '+typeof window[functions [i]]);
}

返回:

alert : function
undefinedFunction : undefined
ff.showAlert : undefined

console.log(typeof window.ff.showAlert); return function

Live demo
有没有办法以编程方式检查函数是否存在?

最佳答案

代码:

window[functions [i]]

正在检查 window['ff.showAlert'] 但您真正想要检查的是:

window['ff']['showAlert']

window.ff.showAlert

为此,需要遍历命名空间(window->ff->...):

function methodIsDefined(fn, obj) {
  var ns = fn.split('.');
  fn = ns.pop();
  do {
    if (!ns[0]) {
      return typeof obj[fn] === 'function';
    }
  } while(obj = obj[ns.shift()]);
  return false;
}

例如

methodIsDefined('ff.showAlert', window); // => true
methodIsDefined('ff.foo', window); // => false

关于javascript - 如何判断一个 JavaScript 函数是否被定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10449197/

相关文章:

javascript - 根据类别选择 DIV ID

javascript - 使用 Javascript 隐藏文本框

javascript - 拼接函数在 1 项数组中无法正常工作

javascript - Google Chrome - 如何终止正在播放 mjpeg 流的 iframe 的流捕获?

javascript - 在 jQuery 中使用 attr() 后如何为图像添加效果?

javascript - Polymer UI 元素影子根不支持使用 selenium webdriver 进行自动化

Javascript:如何在 RegEx .exec 结果中获得多个匹配项

javascript - 使用 jQuery 刷新 div 内容

javascript - 网页上的直播 channel 流

javascript - 对象解构赋值在构造函数中表现异常