如何检查返回变量是否为函数?
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;
请注意,第一个console.log
在函数名称被硬编码时返回TRUE,而在第二个console.log
上,如果正在计算变量,则返回FALSE。
有点奇怪,因为var a
会返回testController
。
这里是jsFiddle。
我的目标是根据mfour属性运行某些功能。所以在上面的例子中,testController将运行testController函数。
答案 0 :(得分:2)
尝试使用window[varname]
- 假设该功能处于全局范围
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
,所以你必须知道,如果你没有为功能名称清理恶意代码,用户可以操纵该字符串;
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;