创建对象时交叉引用js-object变量

时间:2010-06-14 11:57:40

标签: javascript extjs this-pointer

要点:

我想知道是否可以这样做:

{a: 'A',b: this.a}

...使用其他指针,例如{a: 'A',b: self.a}{a: 'A',b: own.a}或其他任何内容......

完整的问题:

我正在尝试使用Ext.extend扩展MyBaseModule,并且需要交叉引用传递给Ext.extend()的扩展对象中的值。

由于我还没有MyModule的上下文,我无法使用 this 来引用该对象(参见第12行下面的示例)。有没有其他方法可以在不先创建对象的情况下引用这样的值?

1 MyModule = Ext.extend(MyBaseModule, {
2   dataStores: {
3       myDataStore: new Ext.data.Store({...})
4   },
5
6   myGridDefinition: {
7       id:                 'myGridDefinitionPanel',
8       bodyBorder:         false,
9       items: [{
10          xtype:          'grid',
11          id:             'myGridDefinitionGrid',
12          store:          this.dataStores.myDataStore
13      }]
14  }
15 });

或以下是唯一的解决方案? 我希望尽可能避免这种情况,因为我发现大型扩展定义的可读性较差。

1 var extensionObject = {
2   dataStores: {
3       myDataStore: new Ext.data.Store({...})
4   },
5
6   myGridDefinition: {
7       id:                 'myGridDefinitionPanel',
8       bodyBorder:         false,
9       items: [{
10          xtype:          'grid',
11          id:             'myGridDefinitionGrid'
12      }]
13  }
14 };
15
16 extensionObject.locationsGrid.items[0].store = extensionObject.dataStores.locations;
17
18 MyModule = Ext.extend(MyBaseModule, extensionObject);

1 个答案:

答案 0 :(得分:1)

您可以逐步构建对象:

var dataStores = {
    myDataStore: new Ext.data.Store({...})
};

var extensionObject = {
    dataStores: dataStores,
    myGridDefinition: {
        id: 'myGridDefinitionPanel',
        bodyBorder: false,
        items: [{
            xtype: 'grid',
            id: 'myGridDefinitionGrid',
            store: dataStores.myDataStore
        }]
    }
};

另一种方法:

var extensionObject = {
    dataStores: {
        myDataStore: new Ext.data.Store({...})
    }
};

extensionObject.myGridDefinition = {
    id: 'myGridDefinitionPanel',
    bodyBorder: false,
    items: [{
        xtype: 'grid',
        id: 'myGridDefinitionGrid',
        store: extensionObject.dataStores.myDataStore
    }]
};