Jquery检查var是否为函数然后调用它

den*_*xic 2 javascript jquery

我有一个变量名称,我将其传递给插件,但该变量实际上是一个函数.我使用jquery $ .isFunction来检查它是否是一个函数,如果是,它应该执行该函数.

但我似乎无法使它工作,我在jsfiddle中提供了一些例子:http://jsfiddle.net/tZ6U9/8/

但这是一个示例代码:

HTML

<a class="one" href="#">click</a><br />
<a class="two" href="#">click</a><br />
<a class="three" href="#">click</a><br />
Run Code Online (Sandbox Code Playgroud)

JS

$(document).ready(function() {

help = function(var1) {
    alert(var1);
}

function help2(var1) {
    alert(var1);
}


$('a.one').click(function() {
    var functionName = "help";
    if ($.isFunction([functionName])) {[functionName]("hello");
    } else {
        alert("not a function");
    }

    return false;
});

$('a.two').click(function() {
    var functionName = "help";

    if ($.isFunction(functionName)) {
        functionName("hello");
    } else {
        alert("not a function");
    }
    return false;
});

$('a.three').click(function() {
    var functionName = "help2";

    if ($.isFunction(functionName)) {
        functionName("hello");
    } else {
        alert("not a function");
    }
    return false;
});

$('a.four').click(function() {
    var functionName = "help2";

    if ($.isFunction([functionName])) {[functionName]("hello");
    } else {
        alert("not a function");
    }
    return false;
});

});?
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我厌倦了很多东西,但所有错误的东西可能......我从中激发了一些:jQuery - 使用变量作为函数名

总的来说, 我传递一个与函数同名的变量,使用jquery检查它是否是一个函数,如果是,它应该执行该函数.

在此先感谢您的帮助.

Aus*_*rst 14

如果您想通过其名称字符串调用函数,请使用window.

var functionName = "help";
if ($.isFunction(window[functionName])) {
    window[functionName]("hello");
} else {
    alert("not a function");
}
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下,将'window'替换为函数所在对象的名称.相同的代码适用. (2认同)
  • 真?为什么?任何来源? (2认同)