在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
相关产品推荐
相关产品推荐

