Dmitry Soshnikov (2013-05-21T04:15:08.000Z)
github at esdiscuss.org (2013-07-12T02:27:22.553Z)
On May 20, 2013, at 2:42 PM, Allen Wirfs-Brock wrote: > > On May 16, 2013, at 5:11 PM, Dmitry Soshnikov wrote: > >> Hey guys, >> >> Sorry for the random question (probably it was already discussed). >> >> What is a current state having mixins/traits syntax along with a class definition? > > They aren't part of ES6. There have been past discussions about mixin support and they could be considered for a future edition > OK. Yes, this is type of abstraction which is very, very nice to have in any OOP-laguage to provide "horizontal" code-reuse, when reused methods are not logically fit to hierarchy concept (in addition to "vertical", aka "inheritance" code reuse). So in the future, I believe ES will still adopt it. This abstraction (traits/mixins) is in many OOP languages. >> >> Like: >> > ```js >> class Foo extends Bar { >> use EventEmitter, CommonMethodsMixin; >> ... >> } >> ``` > > having you considered in ES6 exploiting the fact that what follow etends is an expression: > > ```js > class Foo extends mixin(Bar, EventEmitter,CommonMethodsMixin) { > ... > } > ``` > Surprisingly, this is the exact form we're using in our infra today (and which I proposed internally to replace with "use" approach, since this expression with `mixin(...)` function seems to me "too library-like" rather than a language construct). Another disadvantage, we have to always import that `mixin(...)` module with `var mixin = require('mixin');` Although, I agree for class-AST-trasform we could generate import-code for it automatically. Anyways, thanks for reply, Allen, appreciated. Thought, it's pity traits are not in ES6.