Andrea Giammarchi (2015-02-13T08:40:38.000Z)
d at domenic.me (2015-02-17T20:26:54.845Z)
It looks like we agree traits are **not** classes so that classes should not be used or accepted as traits ... which is already an answer to my initial question. Other "problems" init is a special case, as constructor is. You don't need a constructor to create an instance, you might not need to initialize a trait in order to be used. However, trait brings functionality, and this should be consistent. If a class forgets to initialize a trait this should work regardless. If a class does not need a constructor, traits should be usable/initialized automatically regardless. This is the implicit nature of my proposed `init` . To go your way, initTrait1() as lazy, explicit method you can **always** do that. If a trait requires some specific info during initialization, you can always use `this.initTrait1(info)` inside any class method, but that's something different from the initial, optional, setup such trait might need, a setup that, if present, will be granted inside the implicit `init` What happens inside is also not a class responsibility, class simply has enriched prototype with methods, when that init should occur is not necessarily a class matter while those methods should instead work ASAP. An implicit initializer covers already 100% of cases, it can be absent and go lazy initializer any time. Last question: would an init override another init? Well, using as little as possible stand-alone logic to compose traits, I haven't personally found a case when Trait2 mixins Trait1 but I believe that's how I'd go ```js trait Trait2 { mixin Trait1; init() { Trait1.init.call(this); this.trait2Data = {any:'thing'}; } } ``` init is transparent once mixed in, but reachable regardless explicitly. Same as it is for constructor, nothing new to learn here, we are used to `OtherClass.call(this)` now simplified via `super.constructor()` Last bit of info: all this works already in es-class with traits specified as objects, here more examples: https://github.com/WebReflection/es-class/blob/master/FEATURES.md#with