gpt4 book ai didi

javascript - Extjs 在简单类之间共享数组

转载 作者:行者123 更新时间:2023-12-02 17:57:38 24 4
gpt4 key购买 nike

我有 2 个从基类扩展而来的类。
Class1 扩展 BaseClassClass2 扩展 BaseClass我创建了 1 和 2 的实例。
当我警告 Class2 的数组内容时,我也得到了数组 1 的内容。

http://jsfiddle.net/k3emY/2/

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 参与这个输出?

最佳答案

someArrayBaseClass 原型(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com