2012-12-24 22 views
3

我想使用qx-oo(Qooxdoo)作为OOP库。但是我被野外成员的奇怪行为困惑了。它看起来像一个类的所有对象之间共享字段,如静态成员。例如,该测试代码字段在Qooxdoo库中作为静态字段

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

回答

5

这不是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); 
      } 
     } 
    }); 
+0

是的,谢谢。我在手册中跳过了重要的解释。 – arusland

+0

@Christian这是一个美妙的答案,谢谢你! – blong