<div dir="ltr"><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)">Thanks guys, Proxy is the one, but not supported natively enough yet unfortunately.</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)">Here is the ES5 solution I came up with, which creates "proxy" methods on the "multiPrototype" of the new MultiClass:</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)">```js</div><div class="gmail_default" style=""><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">class MultiClass {</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">    constructor(...constructors) {</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">        let constructorName = ''</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">        let multiPrototype = {}</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif"><br></font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">        console.log(' -- Creating new MultiClass.')</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif"><br></font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">        for (let i=0, l=constructors.length; i<l; i+=1) {</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">            const constructor = constructors[i]</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif"><br></font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">            constructorName += <a href="http://constructor.name">constructor.name</a> + (i == l-1 ? '' : '+')</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">            // f.e. SomeClass_OtherClass_FooBar</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif"><br></font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">            let props = SimplePropertyRetriever.getOwnAndPrototypeEnumerablesAndNonenumerables(constructor.prototype)</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">            for (let prop of props) {</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">                multiPrototype[prop] = constructor.prototype[prop]</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">                console.log(' --- prop', prop)</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">            }</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">        }</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif"><br></font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">        // temporary object to store the new MultiClass constructor, because</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">        // using an object allows us to programmatically assign a name to the</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">        // function, which we otherwise cannot do without eval().</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">        let tmp = {</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif"><br></font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">            // This new constructor doesn't do much, just has all the given</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">            // constructor prototypes mixed in to it's own prototype. Be sure to</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">            // call the each constructor manually in the class that extends this</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">            // new MultiClass.</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">            [constructorName]() {}</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif"><br></font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">        }</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif"><br></font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">        tmp[constructorName].prototype = multiPrototype</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif"><br></font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">        return tmp[constructorName]</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">    }</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">}</font></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">```</font></div><div style="color:rgb(0,0,0);font-family:georgia,serif;font-size:small"><br></div><div style=""><font color="#000000" face="georgia, serif">Where `SimplePropertyRetriever` is taken from the MDN article [Enumerability and ownership of properties](<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties#Obtaining_properties_by_enumerabilityownership">https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties#Obtaining_properties_by_enumerabilityownership</a>). </font></div><div style=""><font color="#000000" face="georgia, serif"><br></font></div><div style=""><font color="#000000" face="georgia, serif">Example usage:</font></div><div style=""><div style=""><font color="#000000" face="georgia, serif"><br></font></div><div style=""><font color="#000000" face="georgia, serif">```js</font></div><div style=""><font color="#000000" face="georgia, serif">class One {</font></div><div style=""><font color="#000000" face="georgia, serif">    foo() {console.log('foo')}</font></div><div style=""><font color="#000000" face="georgia, serif">}</font></div><div style=""><font color="#000000" face="georgia, serif"><br></font></div><div style=""><font color="#000000" face="georgia, serif">class Two {</font></div><div style=""><font color="#000000" face="georgia, serif">    constructor() {/* ... */}</font></div><div style=""><font color="#000000" face="georgia, serif">    bar() {console.log('bar')}</font></div><div style=""><font color="#000000" face="georgia, serif">}</font></div><div style=""><font color="#000000" face="georgia, serif"><br></font></div><div style=""><font color="#000000" face="georgia, serif">class Three extends Two {</font></div><div style=""><font color="#000000" face="georgia, serif">    constructor(...args) {</font></div><div style=""><font color="#000000" face="georgia, serif">        super(...args)</font></div><div style=""><font color="#000000" face="georgia, serif">        // ...</font></div><div style=""><font color="#000000" face="georgia, serif">    }</font></div><div style=""><font color="#000000" face="georgia, serif">    baz() {console.log('baz')}</font></div><div style=""><font color="#000000" face="georgia, serif">}</font></div><div style=""><font color="#000000" face="georgia, serif"><br></font></div><div style=""><font color="#000000" face="georgia, serif">class FooBar extends new MultiClass(Three, One) {</font></div><div style=""><font color="#000000" face="georgia, serif">    constructor(...args) {</font></div><div style=""><font color="#000000" face="georgia, serif">        super() // needed, although does nothing.</font></div><div style=""><font color="#000000" face="georgia, serif"><br></font></div><div style=""><font color="#000000" face="georgia, serif">        // call each constructor.</font></div><div style=""><font color="#000000" face="georgia, serif">        One.call(this, ...args)</font></div><div style=""><font color="#000000" face="georgia, serif">        Three.call(this, ...args)</font></div><div style=""><font color="#000000" face="georgia, serif">    }</font></div><div style=""><font color="#000000" face="georgia, serif">    oh() {console.log('oh')}</font></div><div style=""><font color="#000000" face="georgia, serif">    yeah() {console.log('yeah')}</font></div><div style=""><font color="#000000" face="georgia, serif">}</font></div><div style=""><font color="#000000" face="georgia, serif"><br></font></div><div style=""><font color="#000000" face="georgia, serif">let f = new FooBar</font></div><div style=""><br></div><div style=""><font color="#000000" face="georgia, serif">f.foo()</font></div><div style=""><font color="#000000" face="georgia, serif">f.bar()</font></div><div style=""><font color="#000000" face="georgia, serif">f.baz()</font></div><div style=""><font color="#000000" face="georgia, serif">f.oh()</font></div><div style=""><font color="#000000" face="georgia, serif">f.yeah()</font></div></div></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)">```</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)">Any ideas on how else to do it?</div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><b style="font-size:12.8px">/#<i>!</i>/</b><font face="courier new, monospace" style="font-size:12.8px">JoePea</font><br></div></div></div>
<br><div class="gmail_quote">On Tue, Jul 12, 2016 at 1:52 AM, Claude Pache <span dir="ltr"><<a href="mailto:claude.pache@gmail.com" target="_blank">claude.pache@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><span class=""><div></div><div><br></div><div>Le 12 juil. 2016 à 02:45, /#!/JoePea <<a href="mailto:joe@trusktr.io" target="_blank">joe@trusktr.io</a>> a écrit :<br><br></div><blockquote type="cite"><div><div dir="ltr"><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)">Does one exist? I'm imagining an implementation for</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)">```</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)"><div class="gmail_default">class Node extends new MultiClass(ImperativeBase, Transformable) {</div><div class="gmail_default">}</div><div>```</div></div><br clear="all"></div></div></blockquote><div><br></div></span><div>I think that  Proxy is the tool for that purpose. </div><div><br></div><div>How a symbol would work here, since you need a property lookup in order to find that symbol?</div><span class="HOEnZb"><font color="#888888"><div><br></div><div>—Claude</div></font></span></div></blockquote></div><br></div>