在JavaScript中动态继承类的实例

在JavaScript中动态继承类的实例,javascript,decorator,ecmascript-next,Javascript,Decorator,Ecmascript Next,我正在努力解决JavaScript中的继承问题。假设我有一门课: class Parent { constructor({ name, someOtherStuff } = {}) { this.name = name; this.someOtherStuff = someOtherStuff; } someMethod() { // ... } } 我想创建一个装饰器,它允许我做以下工作: @parent({ name: 'foo', som

我正在努力解决JavaScript中的继承问题。假设我有一门课:

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

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

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

您可以使用decorator创建一个新类,该类继承、应用一些mixin,然后从那里开始。JS类没有mutliple继承,因此您不能直接执行此操作,但您可以手动组合这两个类,或者创建一个代理来执行您想要的操作

通过返回一个类,我已经使用了一个包装类:

}


decorator实际上返回了一个新的构造函数,在原始构造函数的基础上加上闭包,但是对于大多数目的来说,这已经足够了

您可以使用decorator创建一个新类,该类继承、应用一些mixin,然后从那里开始。JS类没有mutliple继承,因此您不能直接执行此操作,但您可以手动组合这两个类,或者创建一个代理来执行您想要的操作

通过返回一个类,我已经使用了一个包装类:

}


decorator实际上返回了一个新的构造函数,在原始构造函数的基础上加上闭包,但是对于大多数目的来说,这已经足够了

他正在探索语言的一个新特点,想知道他是否能以某种方式使用它,但遇到了困难。他不是问如何用传统的方式来做,我需要一个装饰师,因为这应该是我建立的图书馆的一个特点。此外,它还将与已经继承自组件类的react组件一起使用。他正在探索该语言的一个新特性,想知道他是否能够以某种方式使用它,但遇到了困难。他不是问如何用传统的方式来做,我需要一个装饰师,因为这应该是我建立的图书馆的一个特点。此外,它还将与已经从组件类继承的react组件一起使用。By“decorator”,你是指类似python的decorator?@Arnial:。我的意思是:By“decorator”,你是指类似python的decorator?@Arnial:。我的意思是: