2012-12-24 44 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