如何检查返回变量是否是函数?
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>
注意,在第一个console.log上,如果函数名是硬编码的,则返回TRUE;而在第二个console.log上,如果要计算变量,则返回FALSE。
这有点奇怪,因为var a返回testController。
这是jsFiddle。
我在这里的目标是在mfour属性的基础上运行某些函数。因此,在上面的示例中,testController将运行testController函数。
发布于 2015-09-15 14:45:58
在您的示例中,要获得对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));
})
});<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div mfour="testController">Hello</div>
发布于 2015-09-15 14:19:06
尝试使用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>
发布于 2015-09-15 14:23:32
若要检查变量是否为函数,只需添加检查即可。
typeof variableName它将返回变量的类型。
哥们..。
如果可能,将函数添加到对象中。就像下面
var obj = {
testController: function(){
alert('123');
}
};
$(function() {
$('[mfour]').each(function(e, t) {
var a = $(t).attr('mfour');
console.log($.isFunction(obj[a]));
})
});https://stackoverflow.com/questions/32588319
复制相似问题