【问题标题】:Fields are as static fields in Qooxdoo library字段在 Qooxdoo 库中作为静态字段
【发布时间】:2012-12-24 17:47:47
【问题描述】:

我想使用 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

【问题讨论】:

    标签: javascript oop prototypal-inheritance qooxdoo


    【解决方案1】:

    这不是 qooxdoo 的问题。您不应该在类描述中初始化引用类型。您应该使用构造函数初始化引用类型。

    qooxdoomanual有一篇很好的文章解释了这个问题。

    这是你改进后的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);
                }
            }
        });
    

    【讨论】:

    • 好的,谢谢。我跳过了手册中的重要解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 2011-05-16
    相关资源
    最近更新 更多