window["object.something"] 不适用于对象 javascript

window["object.something"] not working for objects javascript

嗨,我就是想不通。

我需要使用 window["evaluate string into js object"],因为我正在将 Web 应用程序转换为 ChromeOS Chrome 应用程序,他们不允许您使用 eval() 执行他们的内容安全策略。

我的问题是基本变量没问题,例如:

var a = "foo";

var b = window["a"];

这将把 "foo" 放入 b 没问题。但是一旦我有一个对象(全局或本地)它就不起作用,所以如果 'a' 是一个对象,代码会像这样:

a.test = "foo";

var b = window["a.test"];

那不行。

这有什么原因吗?一般而言,我似乎找不到关于 window[] 的太多信息,所以想知道是否有任何见解或至少可以指出正确的方向。

谢谢

window[] 不适用于命名空间函数,因此如果您尝试计算 window['a.test'] 它将失败。一个合适的替代方法是使用 window['a']['test']。如果您不确定要使用的命名空间对象的数量,您可以创建一个简单的函数,将字符串从 . 中拆分出来,并为每个部分创建一个 window 对象。示例:

var str = 'namespace.service.function';
var parts = str.split(".");
for (var i = 0, len = parts.length, obj = window; i < len; ++i) {
    obj = obj[parts[i]];
}
console.log(obj);