2012-05-08 137 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); 

编辑:我看到你想做什么,这个答案 目前不正确 应该工作,因为我明白你正在试图做的事。

相关问题