如何检查动态命名对象或函数是否存在?
例如:
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();
答案 0 :(得分:3)
您可以通过撰写window[obj_str]
来获取全名。
答案 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