2012-05-08 43 views
1

我目前正在建設中的JS的東西,遇到了以下方案:調用對象中通過名稱功能(作爲字符串)字面在Javascript

// these are set programmatically, not like this, just using as an example 
var data = {'someData':'blah'}; 
var widget = 'NameOfWidget'; 
var command = 'someFunctionName'; 

// there is a base object that has all widgets and their commands as child objects 
// format would be like: UBER.WidgetName.command(data); 
// here is how I have tried to call it thus far 
UBER[widget][command](data); 
window['UBER'][widget][command](data); 

我覺得像我靠近計算出來,只需要一點點幫助,找出確切的語法!謝謝!

+0

http://stackoverflow.com/questions/912596/how-to-turn-a-string-into-a-javascript-function-call – ScottE

+0

告訴我什麼'的var_dump (UBER.widget.command)'給你? – Starx

+0

所有這些嘗試都是正確的語法,假設你的'UBER'對象是這樣構造的。所以如果它不工作,顯然你的對象不是那樣的結構。嘗試在Chrome開發者控制檯中做一個'console.log(UBER)',並且稍微探索一下這個對象,看看它裏面的內容。如果仍然無法解決問題,請回復'console.log'後面的內容 – LukeGT

回答

0

嘗試:

UBER['widget']['command'](data); 
window['UBER']['widget']['command'](data); 

UBER.widget.command(data); 
window.UBER.widget.command(data); 

這假定命令是一個函數,插件和UBER是對象,並且窗口[ 'UBER'] = UBER。

當您使用括號語法引用對象屬性時,您需要使用一個字符串。如果使用.語法,則必須使用不是Javascript中保留字的合法字符串文字。

例如:

var command = function(){return 5}, 
    widget = {}, 
    UBER = {}; 
UBER.widget = widget; 
widget.command = command; 
console.log(UBER['widget']['command']()); // prints 5 to Chrome's developer console or firebug 
0

你有沒有這樣做的原因?

window[UBER.widget.command](data); 

編輯:我看到你想做什麼,這個答案 目前不正確 應該工作,因爲我明白你正在試圖做的事。

相關問題