如何将属性(动态命名)添加到 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"
所以上面的所有方法都对我有用
考虑以下要求:
假设我有: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"
所以上面的所有方法都对我有用