我想将qx-oo(Qooxdoo)用作OOP库。但是我对现场成员的奇怪行为感到困惑。看起来字段在一个类的所有对象(例如静态成员)之间共享。例如,此测试代码
qx.Class.define("com.BaseClass",
{
extend : qx.core.Object,
members:
{
_children: [],
getChildrenCount: function(){
return this._children.length;
},
addChild: function(child){
this._children.push(child);
}
}
});
var class1 = new com.BaseClass();
var class2 = new com.BaseClass();
showLog("class1.getChildrenCount() - " + class1.getChildrenCount())
showLog("class2.getChildrenCount() - " + class2.getChildrenCount())
class1.addChild("somechild");
showLog("class1.getChildrenCount() - " + class1.getChildrenCount())
showLog("class2.getChildrenCount() - " + class2.getChildrenCount())
将产生这样的日志
class1.getChildrenCount() - 0
class2.getChildrenCount() - 0
class1.getChildrenCount() - 1
class2.getChildrenCount() - 1
有没有办法做到这一点?
还是可以建议另一个OOP-js-lib?
这是完整的example。
最佳答案
这不是qooxdoo的问题。您不应在类描述中初始化引用类型。您应该使用构造函数初始化引用类型。
qooxdoo manual中有一篇很好的文章解释了这个问题。
这是您改进的example:
qx.Class.define("com.BaseClass",
{
extend : qx.core.Object,
construct: function() {
this._children = [];
},
members:
{
_children: null,
getChildrenCount: function(){
return this._children.length;
},
addChild: function(child){
this._children.push(child);
}
}
});
关于javascript - 字段在Qooxdoo库中作为静态字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14024282/