Javascript 从字符串引用对象
我有下面一段代码,它工作得非常好 然而,我下面列出的项目将增加到数十个对象,我想知道是否有可能删除switch子句,并拥有更小、更少的代码行 “type”参数是数组、视口、容器、网格面板等的类型,“component”参数是数组中的对象本身Javascript 从字符串引用对象,javascript,arrays,object,Javascript,Arrays,Object,我有下面一段代码,它工作得非常好 然而,我下面列出的项目将增加到数十个对象,我想知道是否有可能删除switch子句,并拥有更小、更少的代码行 “type”参数是数组、视口、容器、网格面板等的类型,“component”参数是数组中的对象本身 viewport: {}, container: {}, gridpanel: {}, panel: {}, treepanel: {}, window: {}, button: {}, add: function (component, type) {
viewport: {},
container: {},
gridpanel: {},
panel: {},
treepanel: {},
window: {},
button: {},
add: function (component, type) {
switch (component.getType() != undefined ? component.getType() : type) {
case 'container':
this.container[component.getId()] = component;
break;
case 'gridpanel':
this.gridpanel[component.getId()] = component;
break;
case 'panel':
this.panel[component.getId()] = component;
break;
case 'treepanel':
this.treepanel[component.getId()] = component;
break;
case 'viewport':
this.viewport[component.getId()] = component;
break;
case 'window':
this.window[component.getId()] = component;
break;
case 'button':
this.button[component.getId()] = component;
break;
default:
break;
}
},
您可以使用来引用组件类型:
add: function(component, type) {
var componentType = component.getType() || type;
this[componentType][component.getId()] = component;
}
除了Frédéric Hamidi的答案之外,您可能还需要限制要引用的类型数量:
add: function(component, type) {
var componentType = component.getType() || type;
if (Ext.Array.indexOf([
'container', 'gridpanel', 'panel', 'treepanel',
'viewport', 'window', 'button'
], componentType) !== -1) {
this[componentType][component.getId()] = component;
}
}
使用
开关
可以选择要添加到阵列中的类型indexOf
通过检查是否允许添加组件来执行类似的工作。