8

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

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 属性。

我怎样才能做到这一点 ?

4

3 回答 3

5

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

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

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

演示

于 2013-03-18T15:02:31.050 回答
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
    });

});
于 2013-03-18T16:17:22.283 回答
0

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

假设您在第一个配置中有这个:

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

你的第二个对象

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

您的 apply 将覆盖 person ,您将只有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 的答案。

于 2013-03-18T16:03:07.370 回答