我需要一个函数来检查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');
}
});
});
使用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');
}
});
});
我认为您需要使用eval
,因为您的func
是一个字符串。
var func = eval(this.id + 'Controller');
if($.isFunction(func)) {
func();
}
$.isFunction-"确定传递的参数是否为Javascript函数对象"。很明显,你在传递一个字符串。
如果你想检查jQuery插件,而不是使用
if (typeof jQuery[yourFunctionName] == 'function') { ..
对于通用JavaScript函数-
if(typeof window[yourFunctionName] == 'function') { ..
您需要弄清楚您的函数在哪个范围内(或者换句话说,哪个对象是您的函数属性(,然后使用
if ($.isFunction(scope[func])) {
...
}
将所需函数的名称转换为对当前范围内该函数的引用。
当然,这是假设您的函数实际上在的某个范围内。
因此,如果您的homeController()
函数已在全局范围内声明,它将是window.
全局对象的属性。
然而,如果它们刚刚被声明为其他闭包中的内部函数,那么它们就没有了。
Reflection java还可以用于动态检查方法、字段或类是否存在。有关详细信息:如何在Java运行时检查方法是否存在?
function doIt(callback) {
console.log('Did it');
typeof callback === 'function' && callback();
}
这只在函数存在的情况下执行回调。你可以从这个函数中提取这条线,并在任何地方使用它。