我有一个函数可以传递一些值。我创建一个数组并想要创建两个名称/值对。参数 valueField 和 displayField 是我传入的字符串。
在我实例化comboStore的底部,valueField和displayField被视为参数,这很好。但是,当我将对象推送到 dataArray 时,valueField 和 displayField 不会被视为参数,而是被视为文字值。
test:function (valueField, displayField, x, y) {
var dataArray = []
dataArray.push(
{
valueField: x, //this line does not use paramaters
displayField: y //this line does not use paramaters
}
)
var comboStore = {
fields: [valueField,displayField], //this line uses paramaters
data: dataArray
}
return comboStore;
},
如何像这样参数化对象文字?
我尝试过:
'' + valueField + '': x
但这似乎不起作用。
最佳答案
使用subscript (or "bracket")符号而不是点符号:
var data = {};
data[valueField] = x;
data[displayField] = y;
dataArray.push(data);
这可行,但很冗长。您可以编写一个函数来封装对象创建逻辑:
function dataPoint(valueField, displayField, x, y) {
var data = {};
data[valueField] = x;
data[displayField] = y;
return data;
}
dataArray.push(dataPoint('a', 'b', 1, 2));
dataArray.push(dataPoint('c', 'd', 3, 4));
如果您的 valueField
和 displayField
属性是常量,您可以使用工厂函数进一步干燥代码:
function dataPointFactory(valueField, displayField) {
return function(x, y) {
var data = {};
data[valueField] = x;
data[displayField] = y;
return data;
}
}
var makeDataPoint = dataPointFactory('valueField1', 'displayField1');
dataPoint.push(makeDataPoint(1, 2));
dataPoint.push(makeDataPoint(3, 4));
关于javascript - Javascript 中的参数和对象文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26034234/