如何添加mixin ES6的JavaScript类?

在具有一些实例variables和方法的ES6类中,如何添加一个mixin? 我在下面给出了一个例子,虽然我不知道mixin对象的语法是否正确。

class Test { constructor() { this.var1 = 'var1' } method1() { console.log(this.var1) } test() { this.method2() } } var mixin = { var2: 'var2', method2: { console.log(this.var2) } } 

如果我运行(new Test()).test() ,它会失败,因为类中没有method2 ,因为它在mixin中,所以我需要将mixinvariables和方法添加到类中。

我看到有一个lodash mixin函数https://lodash.com/docs/4.17.4#mixin ,但我不知道如何使用它与ES6类。 我很好地使用lodash的解决scheme,甚至没有库提供mixinfunction的纯JS。

Javascript的对象/属性系统比大多数语言更加dynamic,所以向对象添加function是非常容易的。 由于函数是第一类对象,所以它们可以以完全相同的方式添加到对象中。 Object.assign是将一个对象的属性添加到另一个对象的方法。 (它的行为在许多方面与_.mixin相媲美。)

Javascript中的类只是语法糖,使添加构造函数/原型对容易和清晰。 ES6之前的代码没有改变function。

您可以将该属性添加到原型:

 Object.assign(Test.prototype, mixin); 

您可以将它添加到构造函数中创build的每个对象:

 constructor() { this.var1 = 'var1'; Object.assign(this, mixin); } 

您可以根据条件在构造函数中添加它:

 constructor() { this.var1 = 'var1'; if (someCondition) { Object.assign(this, mixin); } } 

也可以在创build后将其分配给对象:

 let test = new Test(); Object.assign(test, mixin); 

你应该看看Object.assign() 。 看起来像这样:

 Object.assign(Test.prototype, mixin); 

这将确保mixin所有方法和属性都将被复制到Test构造函数的原型对象中。