Ext.define混乱

时间:2014-03-24 15:42:42

标签: extjs

我遇到了一个问题,这让我觉得我可能会错误地解释ExtJS类架构的使用。这是一个演示问题的简化版本的例子

        Ext.define('Person', {
            name : 'Default',
            inventory : [],
            addInventoryItem : function(item) {
                Ext.Array.push(this.inventory, item);
            },
            inventoryList : function() {
                console.log("Inventory: " + JSON.stringify(this.inventory));
            },
            setName : function(name) {
                this.name = "name";
            }
        });

        Ext.define('Student', {
            extend : 'Person'
        });

        alex = Ext.create('Student');
        alex.setName("Alex");
        alex.addInventoryItem("Knifes");
        alex.inventoryList();

        david = Ext.create('Student');
        david.setName("David");
        david.addInventoryItem("Forks");
        david.inventoryList();

输出:

Inventory: ["Knifes"]
Inventory: ["Knifes","Forks"]

预期产出:

Inventory: ["Knifes"]
Inventory: ["Forks"]

我会在覆盖类的情况下预期实际结果,但是无法理解为什么我的第二个实例会影响超类,反过来又会反映我的第一个实例所做的更改。

1 个答案:

答案 0 :(得分:2)

问题是在您的类的所有实例之间共享一个inventory数组。在定义类时创建一次数组,然后每个实例只获得对该一个数组的引用。

基本上,您需要在创建时为每个Person实例提供自己的库存数组,如下所示:

Ext.define('Person', {
  ...
  constructor: function() {
    this.inventory = [];
  },
  ...
});