javascript - 从 JavaScript 中的类实例动态继承

标签 javascript decorator ecmascript-next

我有点为 JavaScript 中的继承而苦恼。假设我有以下类(class):

class Parent {
  constructor({ name, someOtherStuff } = {}) {
    this.name = name;
    this.someOtherStuff = someOtherStuff;
  }

  someMethod() {
    // ...
  }
}

我想创建一个装饰器,它允许我执行以下操作:

@parent({
  name: 'foo',
  someOtherStuff: 'bar'
})
class MyClass extends Component {
  myMethod() {
    // ...
  }
}

const instance = new MyClass();

// Those tests must pass
expect(instance.someMethod).toBeFunction();
expect(instance.name).toEqual('foo');
expect(instance.someOtherStuff).toEqual('bar');
expect(instance.myMethod).toBeFunction();
expect(instance instanceof Parent).toBe(true);
expect(instance instanceof MyClass).toBe(true);

有没有办法创建这样的装饰器?我尝试了多种解决方案,但没有一个真正满足所有测试。

const parent = (...args) => (Target) => {
  // Target corresponds to MyClass
  const parent = new Parent(...args);

  // ...
};

lodash 是允许的。

最佳答案

为什么要使用装饰器?你可以只扩展父类

class MyClass extends Parent {
    constructor() {
        super({name: 'foo', someOtherStuff: 'bar'});
    }
}

关于javascript - 从 JavaScript 中的类实例动态继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38746795/

相关文章:

javascript - Jasmine 测试失败......为什么?

javascript - 检测 html 元素何时退出屏幕

javascript - 如何使用 thunk 操作对 mapDispatchToProps 进行单元测试

javascript - 将全局应用程序状态写入应用程序实例

python - Python 中的属性装饰器和设置函数

javascript - ES6 类方法和 React 是否使用粗箭头语法有功能上的区别吗?

javascript - 使用装饰器将属性分配给非原型(prototype)

c# - 声明静态成员的类装饰器(例如,对于 log4net)?

python - 我可以使用 python 装饰器根据输入类型预处理输入和后处理输出吗?

javascript - 为什么 await* 从 async/await 提案中移除?