【问题标题】:Using qooxdoo to extend non-qooxdoo class - cannot access property in constructor使用 qooxdoo 扩展非 qooxdoo 类 - 无法访问构造函数中的属性
【发布时间】:2014-01-02 10:23:59
【问题描述】:

我正在使用 Qooxdoo 来扩展一个不属于 Qooxdoo 的类。正在扩展的类有一个名为“graphics”的属性。

当我创建类的实例时,我可以毫无问题地访问该属性。我也可以在成员函数中访问它。但我无法在构造函数中访问它。

我的问题:

为什么我不能在构造函数中访问有问题的属性?有什么办法吗?

使用 qooxdoo 扩展非 qooxdoo 类通常是个好主意,还是会以意想不到的方式咬我?我对 qooxdoo 的经验很少。

为了更好地理解,这里是有问题的代码:

工作,导致“this.graphics is undefined”:

qx.Class.define('l5o.Sprite',{
    extend : Sprite,

    construct : function(){
        this.graphics.beginFill( 0xff0000 );
        this.graphics.drawRect( 0, 0, 100, 100 );
    }

});

var mysprite = new l5o.Sprite;

确实有效:

qx.Class.define('l5o.Sprite',{
    extend : Sprite,

    members : {
        init : function(){
            this.graphics.beginFill( 0xff0000 );
            this.graphics.drawRect( 0, 0, 100, 100 );
        }
    }

});

var mysprite = new l5o.Sprite;
mysprite.init();

确实也有效:

qx.Class.define('l5o.Sprite',{
    extend : Sprite
});

var mysprite = new l5o.Sprite;
mysprite.graphics.beginFill( 0xff0000 );
mysprite.graphics.drawRect( 0, 0, 100, 100 );

【问题讨论】:

  • 解决方法:添加以下行作为构造函数的第一行:Sprite.apply(this);

标签: javascript inheritance qooxdoo


【解决方案1】:

在我的脑海中:在派生类的构造函数中调用基构造函数(添加this.base(arguments)作为构造函数的第一行,如果内存可用 - 或在文档中查找),否则机会是您在其上调用方法时,您的图形属性未定义。两种工作情况都不会覆盖无参数构造函数,因此在这些情况下会调用基类构造函数。

根据您使用其他语言的经验,您可能希望在调用子类的构造函数之前默认调用基类构造函数。 qooxdoo 不会自动发生这种情况 - 您需要询问框架维护人员为什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 2019-05-21
    相关资源
    最近更新 更多