是否有人可以解释这种行为给我。 让我们声明一个类:
Ext.define('baseClass',{
a:null,
ar:[],
add:function(v) {
this.ar.push(v);
},
sayAr:function() {
console.log(this.ar);
},
setA:function(v) {
this.a= v;
},
sayA:function() {
console.log(this.a);
}
});
现在,我创建了两个对象
var a = Ext.create('baseClass');
var b = Ext.create('baseClass');
测试属性
a.setA(1);
b.setA(2);
a.sayA();
b.sayA();
该输出
1
2
一切都是美好的,但
a.add(1);
b.add(2);
a.sayAr();
b.sayAr();
我们得到
[1,2]
[1,2]
这个我不明白。 为什么它使用单独的“一”的属性,但一个“AR”阵列的两个对象。 “AR”未声明为静态! 我不明白这一点的。
当你把东西在类的声明,这意味着它被压入对象原型(读:它得到跨所有实例共享)。 它不是一个真正的问题字符串/数字/布尔变量,但对于对象和数组,你会看到此行为进来的效果。
如果你想有每个实例的数组/对象,那么你需要的情况下明确添加:
Ext.define('baseClass',{
a:null,
constructor: function(){
this.ar = [];
}
add:function(v) {
this.ar.push(v);
},
sayAr:function() {
console.log(this.ar);
},
setA:function(v) {
this.a= v;
},
sayA:function() {
console.log(this.a);
}
});
这是因为该位在这里:
Ext.define('baseClass',{
a:null,
ar:[], <--------------------------- you're instantiating an array object!
为了使其更清晰,上面的代码就相当于:
Ext.define('baseClass',{
a:null,
ar:new Array(),
因此,这两个对象共享相同的阵列,因为对象的构造函数仅复制参考阵列不是整个数组对象。
不知道Ext.js如何处理构造函数/初始化,但你需要创建不是你把它声明的对象施工过程中数组....
OK,谷歌搜索给了我这样的:
Ext.define('baseClass',{
constructor: function () {
this.ar = [];
},
这应该解决您的问题。