2016-07-14 101 views
0

嗨,我只是不能找出这一个。窗口[“object.something”]不工作的对象javascript

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

我的问题是,对于基本的可变因素是罚款,例如:

var a = "foo"; 

var b = window["a"]; 

这将会把“富”到b中没有任何问题。但只要我有一个对象(包括全局或局部),这是行不通的,因此,如果“A”是一个对象的代码想是这样的:

a.test = "foo"; 

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

这是行不通的。

这是有原因吗?我似乎无法找到关于window[]的很多信息,所以想知道是否有任何见解,或者至少可以指向正确的方向看。

感谢

+0

您正试图查看窗口属性的属性,您将被解释为试图罚款属性(*作为字符串*)'“a.test”'。你可以做'window [“a”] test'吗?我也不明白为什么'eval'会在这里帮助。 –

+0

'window [“a”] [“test”]'是您需要访问它的方式。 – epascarello

+1

http://stackoverflow.com/questions/6393943/convert-javascript-string-in-dot-notation-into-an-object-reference – epascarello

回答

1

window[]没有名字空间中的职能的工作,因此,如果您尝试评估window['a.test']它会失败。一个合适的选择是使用window['a']['test']。如果您不确定要使用的数字名称空间对象,则可以创建一个简单的函数,将字符串从.中拆分出来,并为每个部分创建一个窗口对象。例如:

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);