检查函数是否动态存在



我需要一个函数来检查jQuery中是否存在函数,如果是这样,则应该调用该函数。如果我使用下面的代码和一个简单的名称,它是有效的,但如果我想动态检查一个函数是否存在,它就不起作用。有人知道吗?

function homeController() {
    console.log('in the homecontroller');
}
$('div[class="view"]').each(function() {
        $('#' + this.id).live('pageshow', function() {
            var func = this.id + 'Controller';              
            if($.isFunction(func)) {
                console.log('jquery exists');
            }
        });
    });

使用jQuery.isFunction()方法检查对象是否为函数。

$('div[class="view"]').each(function() {
        $('#' + this.id).live('pageshow', function() {
            var func = eval(this.id + 'Controller');              
            if($.isFunction(func)) {
                console.log('jquery exists');
            }
        });
    });

我认为您需要使用eval,因为您的func是一个字符串。

var func = eval(this.id + 'Controller');
if($.isFunction(func)) {
   func();
}

$.isFunction-"确定传递的参数是否为Javascript函数对象"。很明显,你在传递一个字符串。

如果你想检查jQuery插件,而不是使用

if (typeof jQuery[yourFunctionName] == 'function') { ..

对于通用JavaScript函数-

if(typeof window[yourFunctionName] == 'function') { ..

您需要弄清楚您的函数在哪个范围内(或者换句话说,哪个对象是您的函数属性(,然后使用

if ($.isFunction(scope[func])) {
    ...
}

将所需函数的名称转换为对当前范围内该函数的引用。

当然,这是假设您的函数实际上在的某个范围内。

因此,如果您的homeController()函数已在全局范围内声明,它将是window.全局对象的属性。

然而,如果它们刚刚被声明为其他闭包中的内部函数,那么它们就没有了。

Reflection java还可以用于动态检查方法、字段或类是否存在。有关详细信息:如何在Java运行时检查方法是否存在?

function doIt(callback) {
    console.log('Did it');
    typeof callback === 'function' && callback();
}

这只在函数存在的情况下执行回调。你可以从这个函数中提取这条线,并在任何地方使用它。

最新更新