3

Qx-oo(Qooxdoo)をOOPライブラリとして使用したいのですが。しかし、私はフィールドメンバーの奇妙な行動に混乱しました。静的メンバーのように、フィールドは1つのクラスのすべてのオブジェクト間で共有されているように見えます。たとえば、このテストコード

    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にアドバイスできますか?

これが完全なです。

4

1 に答える 1

5

これは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);
            }
        }
    });
于 2012-12-25T07:24:08.640 に答える