You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在mixins中访问静态成员时this.constructor返回undefined如何解决

问题成因
  • qooxdoo 框架的 Mixin 设计逻辑中,定义在statics配置块内的属性仅归属 Mixin 对象本身,不会自动复制到引入该 Mixin 的目标类的静态属性集合中。
  • 你代码中this.constructor指向的是实例所属的MyClass类,MyClass本身没有定义MAX_ZOOM静态属性,所以读取结果为undefined。
  • this.constructor指令本身功能正常,本次问题本质是待读取的静态属性归属对象不匹配,并非该指令存在故障。
  • 补充:你的示例代码里MyClass的构造函数名存在拼写错误,少写了字母r,正确写法为construct,不过该错误不影响本次问题的复现。
可用解决方案

方案1:直接访问Mixin自身的静态属性

该写法适用所有场景,Mixin的静态属性全局唯一,直接引用即可:

qx.Mixin.define("MZoomable", {
    statics: {
      MAX_ZOOM: 500
    },
    
    members: {
      printMaxZoom: function(){
        // 直接访问Mixin本身的静态属性
        alert(MZoomable.MAX_ZOOM);
      }  
    }
});

方案2:将静态属性预挂载到目标类

如果你确实需要保留this.constructor.MAX_ZOOM的写法,可以在Mixin的构造钩子中给目标类挂载对应静态属性:

qx.Mixin.define("MZoomable", {
    statics: {
      MAX_ZOOM: 500
    },
    // 混入目标类时自动执行的钩子
    construct: function() {
      // 仅当目标类没有该静态属性时才挂载,避免覆盖原有属性
      if (!this.constructor.MAX_ZOOM) {
        this.constructor.MAX_ZOOM = MZoomable.MAX_ZOOM;
      }
    },
    members: {
      printMaxZoom: function(){
        alert(this.constructor.MAX_ZOOM);
      }  
    }
});

内容的提问来源于stack exchange,提问作者goldim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 10:06:03