我有一些es6类
class Human {
constructor(){
this.age = 0;
}
}
我想使用dojo toolkit继承此类
define(["dojo/_base/declare"],
function (declare) {
return declare("Man", Human, {
});
});
我收到错误Class constructor Human cannot be invoked without 'new'
。
尝试继承Human.constructor
和Human.funcWrapper
class Human {
constructor(){
this.age = 0;
}
static funcWrapper(){
return new Human()
}
}
没有任何效果。
我知道我可以使用babel将我的代码转换为函数,但由于某些政治原因我不想要。
答案 0 :(得分:2)
this.inherited(arguments, ["bla"])
(dojo调用super("bla")
的方式)
所以,我已经创建了这个函数来将es6类转换为函数类
function funcClass(type) {
const FuncClass = function (...args) {
const _source = Reflect.construct(type, args, this.constructor);
const keys = Reflect.ownKeys(_source);
for (const key of keys) {
if (!key.match || !key.match(/^(?:constructor|prototype|arguments|caller|name|bind|call|apply|toString|length)$/)) {
const desc = Object.getOwnPropertyDescriptor(_source, key);
!this[key] && Object.defineProperty(this, key, desc);
}
}
}
FuncClass.prototype = type.prototype;
return FuncClass;
}
用法:
define(["dojo/_base/declare"],
function (declare) {
return declare("Man", funcClass(Human), {
});
});