在Jquery / Javascript中访问动态属性名称

在我正在编写的插件中,开发人员可以指定选项,我正在存储和引用这样的选项:

(function( $, window) { $.widget("mobile.plug", $.mobile.widget, { options: { menuWidth: '25%', middleWidth: '25%', mainWidth: '25%' }, some: function(){ var self = this, o = self.options; console.log( o.menuWidth ); } }) }) (jQuery,this); 

我的问题
假设我想遍历所有三个元素(主,菜单,中间)并获得相应的选项值,如果可能的话,我将如何动态构造o。[elem]宽度

这不起作用(错误:在。运算符后缺少名称):

 // this selects panels with jqmData(panel="mid|menu|main") var elems = $('selector'); for (var i = 0; i<elems.length; i++){ var el = elems.eq(i); console.log( o.[el.jqmData("panel")]Width ); } 

您应该能够将“宽度”连接到“面板”结果:

 o[el.jqmData("panel") + "Width"] 

例如,如果el.jqmData("panel")是“menu”,你会得到o["menuWidth"]

您收到错误是因为您尝试使用对象成员运算符的两种forms。

这两种forms是……

  • obj.propertyName 点表示法

  • obj["propertyName"] 括号表示法

你有.[...] (使用两者。点预计会有一个名字出现在它之后)

你需要[...] (没有前面的点)

然后,你想要做字符串连接添加"Width"

 o[el.jqmData("panel") + "Width"] 

您正在寻找的是用括号括起来的符号表示法:

 for (var i = 0; i 

...假设el.jqmData("panel")返回"mid""menu"等。

在JavaScript中,您可以引用带有虚线表示法和文字( obj.foo )的属性,或带括号的表示法和字符串( obj["foo"] )。 在后一种情况下,它不必是文字字符串,它可以是表达式的结果。