访问 mixin 中的静态成员
Access static members in mixins
指令 this.constructor
在混入中不起作用。我得到一个 undefined 值。我想知道为什么会这样,是否可以使用这条指令。有一个代码示例:
qx.Mixin.define("MZoomable", {
statics: {
MAX_ZOOM: 500
},
members: {
printMaxZoom: function(){
alert(this.constructor.MAX_ZOOM);
}
}
});
qx.Class.define("MyClass", {
extend: qx.core.Object,
include: [MZoomable],
constuct: function(){
this.base(arguments);
}
});
const o = new MyClass();
o.printMaxZoom();
alert in printMaxZoom
将显示 undefined 字词。
答案是this.constructor
在运行时指的是对象的class,那就是MyClass
。我希望如果您将 printMaxZoom
修改为:
printMaxZoom: function(){
alert(this.constructor === MyClass);
}
然后您会收到一条提示“正确”的警报。
这是在运行时确定类型(包括添加 mixin)的环境的固有特征。
如果你想引用一个Mixin的静态成员,你应该使用绝对语法,例如:
printMaxZoom: function(){
alert(MZoomable.MAX_ZOOM);
}
请注意,始终 对静态变量使用绝对路径是一个好习惯,使用 this.constructor
作为快捷方式通常是一个错误。
例如:
qx.Class.define("MyClassOne", {
extend: qx.core.Object,
construct: function(){
this.base(arguments);
alert(this.constructor.MY_VALUE);
},
statics: {
MY_VALUE: 23
}
});
qx.Class.define("MyClassTwo", {
extend: MyClassOne
});
// creates an alert that says "23"
var one = new MyClassOne();
// creates an alert that says "undefined"
var one = new MyClassTwo();
问题与您问题中的问题相同,因为 this.constructor
是对象的实际 class,而 不是 class(或 mixin)出现 this.constructor
语句的地方。
指令 this.constructor
在混入中不起作用。我得到一个 undefined 值。我想知道为什么会这样,是否可以使用这条指令。有一个代码示例:
qx.Mixin.define("MZoomable", {
statics: {
MAX_ZOOM: 500
},
members: {
printMaxZoom: function(){
alert(this.constructor.MAX_ZOOM);
}
}
});
qx.Class.define("MyClass", {
extend: qx.core.Object,
include: [MZoomable],
constuct: function(){
this.base(arguments);
}
});
const o = new MyClass();
o.printMaxZoom();
alert in printMaxZoom
将显示 undefined 字词。
答案是this.constructor
在运行时指的是对象的class,那就是MyClass
。我希望如果您将 printMaxZoom
修改为:
printMaxZoom: function(){
alert(this.constructor === MyClass);
}
然后您会收到一条提示“正确”的警报。
这是在运行时确定类型(包括添加 mixin)的环境的固有特征。
如果你想引用一个Mixin的静态成员,你应该使用绝对语法,例如:
printMaxZoom: function(){
alert(MZoomable.MAX_ZOOM);
}
请注意,始终 对静态变量使用绝对路径是一个好习惯,使用 this.constructor
作为快捷方式通常是一个错误。
例如:
qx.Class.define("MyClassOne", {
extend: qx.core.Object,
construct: function(){
this.base(arguments);
alert(this.constructor.MY_VALUE);
},
statics: {
MY_VALUE: 23
}
});
qx.Class.define("MyClassTwo", {
extend: MyClassOne
});
// creates an alert that says "23"
var one = new MyClassOne();
// creates an alert that says "undefined"
var one = new MyClassTwo();
问题与您问题中的问题相同,因为 this.constructor
是对象的实际 class,而 不是 class(或 mixin)出现 this.constructor
语句的地方。