我遇到了一个问题,这让我觉得我可能会错误地解释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"]
我会在覆盖类的情况下预期实际结果,但是无法理解为什么我的第二个实例会影响超类,反过来又会反映我的第一个实例所做的更改。
答案 0 :(得分:2)
问题是在您的类的所有实例之间共享一个inventory
数组。在定义类时创建一次数组,然后每个实例只获得对该一个数组的引用。
基本上,您需要在创建时为每个Person
实例提供自己的库存数组,如下所示:
Ext.define('Person', {
...
constructor: function() {
this.inventory = [];
},
...
});