aru*_*and 3 javascript oop prototypal-inheritance qooxdoo
我想使用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())
Run Code Online (Sandbox Code Playgroud)
会产生这样的日志
class1.getChildrenCount() - 0
class2.getChildrenCount() - 0
class1.getChildrenCount() - 1
class2.getChildrenCount() - 1
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这个目标?
或者你能建议另一个OOP-js-lib吗?
这是一个完整的例子.
这不是qooxdoo的问题.您不应该在类描述上初始化引用类型.您应该使用构造函数初始化引用类型.
qooxdoo 手册中有一篇很好的文章解释了这个问题.
以下是您的改进示例:
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);
}
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |