Javascript Extjs合并对象
我的应用程序中有一个超类,它定义了如下对象:Javascript Extjs合并对象,javascript,extjs,extjs4,Javascript,Extjs,Extjs4,我的应用程序中有一个超类,它定义了如下对象: Ext.define('superclass', { myObject: { prop1: true, prop2: 200, .. } myObject: { prop1: false, prop2: false, person: { surname: "Doe" } } 以及继承上述超类的子类,该子类声明相同的对象: Ext.define('
Ext.define('superclass', {
myObject: {
prop1: true,
prop2: 200,
..
}
myObject: {
prop1: false,
prop2: false,
person: {
surname: "Doe"
}
}
以及继承上述超类的子类,该子类声明相同的对象:
Ext.define('childclass', {
extend: 'superclass',
myObject: {
prop3: false,
prop4: false,
..
}
问题在于,子类中的myObject只有prop3和prop4属性
我需要myObject ib子类具有所有prop1、prop2、prop3和prop4属性
如何执行此操作?在构造函数中扩展对象(如果扩展Ext.Component,则在initComponent中扩展):
.Molecular man的答案是正确的,但是我会使用merge函数 假设您在第一次配置中有:
myObject: {
prop1: false,
person: {
name: "John"
}
}
你的第二个目标是什么
myObject: {
prop2: false,
person: {
surname: "Doe"
}
}
您的应用程序将覆盖person,并且您只有person.姓氏
变成这样:
Ext.define('superclass', {
myObject: {
prop1: true,
prop2: 200,
..
}
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的答案。提供的两个答案将在构建子类后立即更改超类原型的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
});
});
这(以及Ext.merge解决方案)将更改超类原型上的
myObject
,这似乎不是理想的行为。您可能需要翻转参数,并将This.myObject作为Ext.apply的第三个(默认)参数。现在,子类的自定义属性将无法覆盖超类属性,因为myObject的属性将应用于子类的顶部。是的,没错,我不认为这是一个公认的、比下面wantok的答案更高的答案,这是任何人的猜测。确保你读了评论。重写prop1/2将失败(这不是问题的一部分,因此答案没有错,但这将适用于使用此解决方案的许多人)。这是可行的,但现在,我需要在子类中为超类添加一个“require”。这是正确的吗?在我的例子中,我使用的是Deftjs libs,我需要在类中声明一个“control”对象,即bind元素。@paulo我认为在定义childclass之前,您需要超类。在我正在研究的项目中,我们不使用Ext. Loader,超级文件已经包含进来了,所以这是我没有考虑到的。比目前接受的答案好得多,而且更早更早。我正面临着这个解决方案和分子人的问题。看起来myObject甚至为新的实例化对象(lest,派生这个超类的另一个子类类型)保留了这个新属性。