在javascript中通过es7装饰器创建子类(扩展)
有没有一种方法可以通过decorator动态地对es6类进行子类化 警告:以下内容无效,仅供讨论在javascript中通过es7装饰器创建子类(扩展),javascript,ecmascript-6,es6-class,Javascript,Ecmascript 6,Es6 Class,有没有一种方法可以通过decorator动态地对es6类进行子类化 警告:以下内容无效,仅供讨论 export function dec(target) { var ParentClass = function(...args) { console.log('parent ctor') target.prototype.apply(this, args); // this probally is not right } return newParentClass; }
export function dec(target) {
var ParentClass = function(...args) {
console.log('parent ctor')
target.prototype.apply(this, args); // this probally is not right
}
return newParentClass;
}
@dec
class TestClass {
constructor(...args) {
super(args);
console.log('child ctor');
}
}
在本例中,输出为:
> parent ctor
> child ctor
其效果与……相同
class ParentClass extends TestClass {
constructor(...args) {
super(args);
console.log('parent ctor');
}
}
这可能吗
有没有一种方法可以通过decorator动态地对es6类进行子类化
不,因为ES6中没有decorator:-但是即使这个建议在将来的语言版本中被接受,您也不会使用decorator来进行子类化。相反,只需为超类提供一个表达式:
function dynamicExample() {
return class ParentClass {
constructor(...args) {
console.log('parent ctor', args);
}
};
}
class TestClass extends dynamicExample() {
constructor(...args) {
super(...args);
console.log('child ctor');
}
}
您是否要求返回类扩展目标{constructor…args{console.log'parent-ctor';super…args;}}?我很困惑,因为您的示例中的父级和子级的顺序似乎很奇怪。您应该只使用类TestClass ExtendedDecoratedWhatch…{装饰器不是ES7的一部分。它们仍处于建议阶段。如何通过:Object.setPrototypeOfTestClass.prototype,ParentClassAnd无性能缺陷:TestClass.prototype=Object.createParentClass.prototype;