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);
嗨,我就是想不通。
我需要使用 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);