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一样, 是作为单例存在的.
- Ext - 数组 和 对象(方法) 在继承对象中内存共享问题.
- 共享内存对象方法(MapViewOfFile)
- Ext中对象使用问题
- 《C++面向对象》在C++中子类继承和调用父类的构造函数方法
- 继承与构造方法与对象数组
- IPC对象、共享内存和消息队列
- Java继承中属性、方法和对象的关系
- Java继承中属性、方法和对象的关系
- Java继承中属性、方法和对象的关系
- Java继承中属性、方法和对象的关系
- Java继承中属性、方法和对象的关系
- 面向对象继承中内存加载原理
- 在NS2中添加C++对象和Otcl对象方法
- Ext.extend 注意config中定义的数组 导致对象共用的问题
- PHP中数组,字符串和对象的在方法中的引用方式
- 对象数组增删改查和继承
- 在数组中存储对象
- 《Ext江湖》学习笔记--JS中变量、对象和数组的定义与使用
- VirtualKD + VMWare实现单机内核调试
- C语言课程设计具体安排说明
- [Win32汇编]之用字符串填充edit控件
- C语言课程设计具体安排说明
- Linux内核的下载和解压
- Ext - 数组 和 对象(方法) 在继承对象中内存共享问题.
- 提高编程效率的技巧
- 红黑树与C实现算法 - RedBlackTree.c
- 企鹅Sheldon批处理系列之2——指定文件夹下所有文件的字符串替换
- VC++颜色渐变实现的3种方法
- Tomcat、Weblogic及WebSphere使用感悟
- Hide in the shadow
- 多线程
- Ext 3 - Dwr 数据交互 Grid用store : DWRProxy