Javascript Extjs在简单类之间共享数组
我有两个从基类扩展而来的类。Javascript Extjs在简单类之间共享数组,javascript,arrays,extjs,Javascript,Arrays,Extjs,我有两个从基类扩展而来的类。 Class1扩展了基类 Class2扩展了基类 我创建了1和2的实例。 当我提醒Class2的数组内容时,我也得到了array one的内容 为什么Class1参与这个输出?someArray是基类的原型的一个属性。原型的属性在子类和实例之间共享。要避免此结果,请从构造函数中声明数组。考虑下面的场景,这是你的一个简化版本: function Class() {} Class.prototype.array = []; var c1 = new Class();
Class1扩展了基类 Class2扩展了基类 我创建了1和2的实例。
当我提醒Class2的数组内容时,我也得到了array one的内容
为什么Class1参与这个输出?
someArray
是基类的原型的一个属性。原型的属性在子类和实例之间共享。要避免此结果,请从构造函数中声明数组。考虑下面的场景,这是你的一个简化版本:
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
这是因为它是同一个数组。您可以为每个实例创建一个新数组,如下所示:
var c1 = { array: [] };
var c2 = { array: [] };
c1.array === c2.array; // false
Ext.onReady(function () {
var c1 = Ext.create('Child1Class');
var c2 = Ext.create('Child2Class');
alert(c2.someArray.join());
});
Ext.define('BaseClass', {
constructor: function (config) {
this.callParent(arguments);
Ext.apply(this, {
someArray: ["BaseClass text "],
});
}
});
Ext.define('Child1Class', {
extend: 'BaseClass',
constructor: function () {
this.callParent(arguments);
this.someArray[this.someArray.length] = "Class1 text";
}
});
Ext.define('Child2Class', {
extend: 'BaseClass',
constructor: function () {
this.callParent(arguments);
this.someArray[this.someArray.length] = "Class2 text";
}
});