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

标签 javascript arrays extjs

我有 2 个从基类扩展而来的类。
Class1 扩展 BaseClass Class2 扩展 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/

相关文章:

javascript - 使用Jmeter测试时删除空标签

javascript - 如何在 Javascript 中编辑属性节点

javascript - 如何解决 ' Uncaught TypeError: Converting circular structure to JSON '

extjs - 如何用标签隐藏文本框?

javascript - 一次切换一个元素时遇到问题 (jQuery)

javascript - 在解析中检索信息

javascript - 全日历日点击返回错误日期

java - 如何使用Java 8的parallelSort()对 map 列表进行排序

Javascript Funky 数组灾难

javascript - 如何正确使用 forEach 或拼接