Extjs合并对象

时间:2013-03-18 14:44:16

标签: javascript extjs extjs4

我的应用程序中有一个超类,它定义了一个这样的对象:

Ext.define('superclass', {
    myObject: {
        prop1: true,
        prop2: 200,
        ..
    }

和一个继承上面超类的子类,它声明了同一个对象:

Ext.define('childclass', {
    extend: 'superclass',

    myObject: {
        prop3: false,
        prop4: false,
        ..
    }

问题在于,子类中的myObject只有prop3和prop4属性。

我需要myObject ib子类具有prop1,prop2,prop3和prop4属性。

我该怎么做?

3 个答案:

答案 0 :(得分:5)

在构造函数中扩展对象(如果扩展Ext.Component,则在initComponent中扩展):

Ext.define('childclass', {
    extend: 'superclass',

    constructor: function() {
        this.myObject = Ext.apply({}, this.myObject, {
            prop3: false,
            prop4: false
        });
        this.callParent(arguments);
    }
});

Demo

答案 1 :(得分:3)

只要构造子类,两个提供的答案都将更改超类原型的myObject属性。这可能不是你想要的。我怀疑你为什么要像这样把一个对象放在类原型上。这样做通常不是一个好主意。但如果你真的想,你可以这样做

Ext.define('childclass', {
    extend: 'superclass',

    // I'm adding an empty object here so that myObject on the
    // prototype does not get overridden.
    myObject: Ext.merge({}, superclass.prototype.myObject, {
        prop3: false,
        prop4: false
    });

});

答案 2 :(得分:0)

@Molecular man的回答是正确的,但我会使用合并功能。

让我们说你在第一个配置中有这个:

myObject: {
   prop1: false,
   person: {
       name: "John"
   }
}

你的第二个对象

myObject: {
   prop2: false,
   person: {
       surname: "Doe"
   }
}

您的申请将覆盖此人,您只会person.surname

这样的事情:

myObject: {
   prop1: false,
   prop2: false,
   person: {
       surname: "Doe"
   }
}

合并将合并两个对象。

Ext.define('childclass', {
    extend: 'superclass',

    constructor: function() {
        this.myObject = Ext.merge(this.myObject, {
            prop3: false,
            prop4: false
        });
        this.callParent(arguments);
    }
});

请注意,只有在我的例子中描述的引文中才需要这样做,否则你可以使用Molecular的答案。