如何添加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
构造函数的原型对象中。