JavaScript确定动态命名的函数是否存在

时间:2011-05-01 13:35:59

标签: javascript

如何检查动态命名对象或函数是否存在?

例如:

var str = 'test';
var obj_str = 'Page_'+str;

function Page_test(){

}

if(typeof obj_str() == 'function') alert('ok');
else alert('error');

然后我该如何调用对象?

例如:

var tst = obj_str();

4 个答案:

答案 0 :(得分:3)

您可以通过撰写window[obj_str]来获取全名。

Demo

答案 1 :(得分:2)

你很接近,但不要试图调用 obj_str(它只是一个字符串,它不可调用);相反,使用它在window上查找属性(因为所有全局函数和全局变量都是window的属性):

if(typeof window[obj_str] == 'function') alert('ok');
//               ^-- No (), and use `window`
else alert('error');

如果你不在乎它特别是功能

if (obj_str in window) alert('ok');
else alert('error');

in运算符检查给定字符串是否与给定对象中的属性名称匹配(在这种情况下,如果obj_str的内容是window中的属性)。

答案 2 :(得分:1)

您的示例是正确的,除了在obj_str()之后删除括号:

if(typeof obj_str != 'undefined') alert('ok');
else alert('error');

这比window[obj_str]更正确,因为obj_str可以在局部闭包中定义,或者如果你有嵌套闭包,在包含闭包但不在窗口本身。

答案 3 :(得分:0)

如果您在浏览器中运行代码,只需通过window访问全局对象,您的代码可能会这样:

if (typeof window[obj_str] === 'string') {
    alert('ok');
}

否则,您应该可以访问全局对象:

var global = function() { return this; }() || (1,eval)('this');
if (typeof global[obj_str] === 'stribg