Javascript 从字符串引用对象

Javascript 从字符串引用对象,javascript,arrays,object,Javascript,Arrays,Object,我有下面一段代码,它工作得非常好 然而,我下面列出的项目将增加到数十个对象,我想知道是否有可能删除switch子句,并拥有更小、更少的代码行 “type”参数是数组、视口、容器、网格面板等的类型,“component”参数是数组中的对象本身 viewport: {}, container: {}, gridpanel: {}, panel: {}, treepanel: {}, window: {}, button: {}, add: function (component, type) {

我有下面一段代码,它工作得非常好

然而,我下面列出的项目将增加到数十个对象,我想知道是否有可能删除switch子句,并拥有更小、更少的代码行

“type”参数是数组、视口、容器、网格面板等的类型,“component”参数是数组中的对象本身

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
通过检查是否允许添加组件来执行类似的工作。