我的应用程序中有一个超类,它定义了一个这样的对象:
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属性。
我该怎么做?
答案 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);
}
});
答案 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的答案。