我需要一个函数来检查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');
}
});
});
答案 0 :(得分:3)
使用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');
}
});
});
答案 1 :(得分:1)
我认为您需要使用eval
,因为您的func
是一个字符串。
var func = eval(this.id + 'Controller');
if($.isFunction(func)) {
func();
}
答案 2 :(得分:1)
$。isFunction - “确定传递的参数是否是Javascript函数对象”。显然,你传递的是一个字符串。
如果你想检查jQuery插件而不是使用
if (typeof jQuery[yourFunctionName] == 'function') { ..
对于一般的JavaScript函数 -
if(typeof window[yourFunctionName] == 'function') { ..
答案 3 :(得分:0)
您需要确定您的函数所在的范围(或者换句话说,哪个对象是您的函数属性),然后使用
if ($.isFunction(scope[func])) {
...
}
将所需函数的名称转换为对当前作用域内该函数的引用。
当然,假设您的函数实际上是在某个范围内。
因此,如果您的homeController()
函数已在全局范围内声明,则它将是window.
全局对象的属性。
然而,如果他们刚刚在其他一些封闭声明中被宣布为内部函数,那么他们就没有。
答案 4 :(得分:0)
function doIt(callback) {
console.log('Did it');
typeof callback === 'function' && callback();
}
这仅在函数存在时执行回调。您可以从此功能中拉出该行并在任何地方使用它。
答案 5 :(得分:0)
Reflection-java也可用于动态检查方法,字段或类是否存在。 欲获得更多信息: How To Check If A Method Exists At Runtime In Java?