检查If函数是否动态存在

时间:2011-08-09 13:44:33

标签: jquery function controller

我需要一个函数来检查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');
            }
        });
    });

6 个答案:

答案 0 :(得分:3)

使用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');
            }
        });
    });

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

$。isFunction - “确定传递的参数是否是Javascript函数对象”。显然,你传递的是一个字符串。

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

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

对于一般的JavaScript函数 -

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

答案 3 :(得分:0)

您需要确定您的函数所在的范围(或者换句话说,哪个对象是您的函数属性),然后使用

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

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

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

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

然而,如果他们刚刚在其他一些封闭声明中被宣布为内部函数,那么他们就没有。

答案 4 :(得分:0)

function doIt(callback) {

    console.log('Did it');

    typeof callback === 'function' && callback();

}

这仅在函数存在时执行回调。您可以从此功能中拉出该行并在任何地方使用它。

答案 5 :(得分:0)

Reflection-java也可用于动态检查方法,字段或类是否存在。 欲获得更多信息: How To Check If A Method Exists At Runtime In Java?