2016-07-14 61 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);