我遇到了需要从服务器访问 javascript 对象的情况。服务器返回函数或对象的字符串名称,我将根据其他元数据对对象进行不同的评估。
最初我正在评估 (eval([string])
) 并且一切正常。最近我正在更新函数以不使用 eval
以确保安全安心,但我遇到了命名空间对象/函数的问题。
具体来说,我尝试用 window[name]
替换 eval([name])
以通过全局对象的方括号语法访问对象 vs 评估
。
但是我遇到了命名空间对象的问题,例如:
var strObjName = 'namespace.serviceArea.function';
// if I do
var obj = eval(strObjName); // works
// but if I do
var obj = window[strObjName]; // doesn't work
谁能想出一个好的解决方案来避免将 eval
与命名空间字符串一起使用?
最佳答案
您可以拆分 .
并依次解析每个属性。只要字符串中的所有属性名称都不包含 .
字符,就可以了:
var strObjName = 'namespace.serviceArea.function';
var parts = strObjName.split(".");
for (var i = 0, len = parts.length, obj = window; i < len; ++i) {
obj = obj[parts[i]];
}
alert(obj);
关于javascript - 在不使用 eval 的情况下通过字符串名称访问命名空间的 javascript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4981671/