我有 2 个从基类扩展而来的类。
Class1 扩展 BaseClass
Class2 扩展 BaseClass
我创建了 1 和 2 的实例。
当我警告 Class2 的数组内容时,我也得到了数组 1 的内容。
Ext.onReady(function () {
var c1 = Ext.create('Child1Class');
var c2 = Ext.create('Child2Class');
alert(c2.someArray.join());
//actual result: "BaseClass text ,Class1 text,Class2 text"
//expected :"BaseClass text ,Class2 text"
});
Ext.define('BaseClass', {
someArray: ["BaseClass text "],
});
Ext.define('Child1Class', {
extend : 'BaseClass',
constructor : function(){
this.someArray[this.someArray.length] = "Class1 text";
}
});
Ext.define('Child2Class', {
extend : 'BaseClass',
constructor : function(){
this.someArray[this.someArray.length] = "Class2 text";
}
});
为什么 Class1 参与这个输出?
最佳答案
someArray
是BaseClass
原型(prototype)的属性。原型(prototype)的属性在子类和实例之间共享。为了避免这种结果,请从构造函数中声明该数组。考虑以下场景,它是您的简化版本:
function Class() {}
Class.prototype.array = [];
var c1 = new Class();
var c2 = new Class();
c1.array.push('a');
c2.array; // ["a"]
实际上,这非常接近:
var array = [];
var c1 = { array: array };
var c2 = { array: array };
c1.array === c2.array; // true
现在,让我们使用构造函数:
function Class() {
this.array = [];
}
var c1 = new Class();
var c2 = new Class();
c1.array.push('a');
c2.array; // []
这个场景也可以简化:
var c1 = { array: [] };
var c2 = { array: [] };
c1.array === c2.array; // false
关于javascript - Extjs 在简单类之间共享数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20866314/