Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Extjs在简单类之间共享数组_Javascript_Arrays_Extjs - Fatal编程技术网

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";
    }
});