Ext - 数组 和 对象(方法) 在继承对象中内存共享问题.

来源:互联网 发布:淘宝客服昵称大全修改 编辑:程序博客网 时间:2024/06/15 01:42

二: 数组作用域问题: 今天遇到一个折腾了很久才解决的问题.

 

先上结论: 在使用extends时, 不能将数组和属性对象在proptype中(就是 : , 的形式)声明.

 

使用Ext.extend 扩展了1个FormPanel, 然后new了2个对象, 却发现对一个对象进行push等操作时, 始终对另一个对象有影响.

最后发现, 是在js的'类'中声明的数组, 其实例对象的此数组使用的同一数组.

 DataGrid = Ext.extend(Ext.grid.GridPanel, {

       fields = new Array();

        //省略其他...

}

       var d1 = new DataGrid ();

       var d2 = new DataGrid ();

       d1.fields.push('a');

       alert(d2.fields[0]); //将提示 a.

 

解决办法 : 在函数内以 this的形式定义.

DataGrid = Ext.extend(Ext.grid.GridPanel, {

          initComponent : function(config) {                   

                   this.fields = new Array();

                   //省略其他...

  }

}

 

 

 

Ext是比较形象的OO继承, 实际上不用Ext的继承也会遇到这个现象.

DataGrid = function(){

   this.f = new Array(); //安全

}

 

DataGrid.proptype = {

       fields = new Array();  // 这里, 继承DataGrid的对象, 就会和上面一样出现数组问题.

}

 

 

究其原因, 可能数组在js中属于引用类型, js是基于function的,就像java是基于object. 因此在组件内定义数组和定义function一样, 是作为单例存在的.

原创粉丝点击