如何将属性(动态命名)添加到 JS/ExtJS 对象?

How do I add an attribute (which is to be dynmamically named) to JS/ExtJS object?

考虑以下要求:

假设我有:var sampleObj = { };

我想给这个对象添加一些属性+值。例如结果对象是:

 sampleObj = 
   { 
    'att1' : 'value1', 
    'att2' : 'value2', 
    'att3' : 'value3' 
   }

现在我可以通过直接设置sampleObj.att1 = 'value1'来轻松做到这一点,依此类推。

但问题是我动态获取属性名称。说名字在一些字符串变量中,例如attName = 'att5'

sampleObj.set/add(attName, 'value'); 不起作用。

如果像 sampleObj.attName = 'value' 那样尝试,它会添加 'attName' 作为属性。

我想要的是sampleObj.${attName} = 'value'

我该怎么做?

您需要使用 bracket notation 访问变量名称为 属性 的

sampleObj[attName] = 'value';

您应该可以使用 Ext.apply。您还应该能够使用标准数组类型分配,例如 sampleObj['attr1'] = 'value';

所以在这种情况下你会做这样的事情:

var sampleObj = 
{ 
    'att1' : 'value1', 
    'att2' : 'value2', 
    'att3' : 'value3' 
}

var panel = Ext.create('Ext.panel.Panel');
Ext.apply(panel, sampleObj);

在浏览器控制台 (firefox) 中测试:

var sampleObj = 
{ 
    'att1' : 'value1', 
    'att2' : 'value2', 
    'att3' : 'value3' 
}

sampleObj.att4 = 'value4';

sampleObj['att5'] = 'value5';

console.log(sampleObj);

产生了以下输出:

att1" "value1"
att2" "value2"
att3: "value3"
att4: "value4"
att5: "value5"

所以上面的所有方法都对我有用