1

有没有办法通过装饰器动态子类化 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;
}

@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');
  }
}

这可能吗?

4

2 回答 2

0
export const EnumDecorator = (enumName, initValue, options) => (Class) 
=> {
  const attrs = Enum(initValue, options);
  return class decorator extends Class {
    constructor(props) {
      super(props);
      attrs.value = props[enumName]?.value ? props[enumName].value : 
props[enumName];
      this[enumName] = attrs;
    }
  };
};
于 2021-07-24T18:46:10.670 回答
-1

有没有办法通过装饰器动态子类化 es6 类?

不,因为 ES6 中没有装饰器 :-) 但是即使该提案在某些未来的语言版本中被接受,您也不会使用装饰器进行子类化。相反,只需为超类提供一个表达式:

function dynamicExample() {
  return class ParentClass {
    constructor(...args) {
      console.log('parent ctor', args);
    }
  };
}

class TestClass extends dynamicExample() {
  constructor(...args) {
    super(...args);
    console.log('child ctor');
  }
}
于 2016-09-19T08:28:31.947 回答