在JavaScript中动态继承类的实例
我正在努力解决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
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:。我的意思是: