JQuery检查变量是否是函数

时间:2015-09-15 14:11:16

标签: javascript jquery

如何检查返回变量是否为函数?



var testController = function() {
  alert('123');
}

$(function() {
  $('[mfour]').each(function(e, t) {
    var a = $(t).attr('mfour');
    console.log($.isFunction(testController));
    console.log($.isFunction(a));
  })
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<div mfour="testController">asd</div>
&#13;
&#13;
&#13;

请注意,第一个console.log在函数名称被硬编码时返回TRUE,而在第二个console.log上,如果正在计算变量,则返回FALSE。

有点奇怪,因为var a会返回testController

这里是jsFiddle

我的目标是根据mfour属性运行某些功能。所以在上面的例子中,testController将运行testController函数。

3 个答案:

答案 0 :(得分:2)

尝试使用window[varname] - 假设该功能处于全局范围

像这样

DEMO

var testController = function() {
    alert('123');
}

$(function() {
    $('[mfour]').each(function(e, t) {
        var a = $(t).attr('mfour');
        console.log($.isFunction(testController));
        console.log($.isFunction(window[a]));
        console.log(typeof window[a] === "function");
    })
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div mfour="testController">Hello</div>

答案 1 :(得分:1)

要检查变量是否为函数,只需添加一个检查

typeof variableName

它将返回变量的类型。

多德..

如果可能,将您的功能添加到对象。如下所示

var obj = {
    testController: function(){
       alert('123');
    }
};

    $(function() {
        $('[mfour]').each(function(e, t) {
            var a = $(t).attr('mfour');
            console.log($.isFunction(obj[a]));
        })
    });

答案 2 :(得分:1)

在您的示例中,要获得对testFunction的引用(如果它在范围内),您可以使用eval。是的,我说过,eval,所以你必须知道,如果你没有为功能名称清理恶意代码,用户可以操纵该字符串;

&#13;
&#13;
var testController = function() {
  alert('123');
}

$(function() {
  $('[mfour]').each(function(e, t) {
    var a = eval($(t).attr('mfour'));
    console.log($.isFunction(testController));
    console.log($.isFunction(a));
  })
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div mfour="testController">Hello</div>
&#13;
&#13;
&#13;