It was. The main problem that comes to mind is that it doesn't work with anonymous classes. Even with named classes, I find it can be tedious and repetitive, especially with long class names.<div><br></div><div>Javascript's current class-as-constructor syntax is nicely terse and doesn't require stuttering the "class" name. I think the goal with the class proposal was to aim for that level of syntactic lightness.<br>

<div><br></div><div>- bob</div><div><br><div class="gmail_quote">On Tue, Jun 7, 2011 at 12:42 PM, Gavin Barraclough <span dir="ltr"><<a href="mailto:barraclough@apple.com">barraclough@apple.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div style="word-wrap:break-word"><div>Brendan,</div><div><br></div><div>Out of interest was a C++/Java style constructor considered, with the constructor name matching the class name?</div>

<div><br></div><div>cheers,</div><div>Gavin.</div><font color="#888888"><div><br></div><br></font><div><div><div></div><div class="h5"><div>On May 16, 2011, at 8:02 AM, Brendan Eich wrote:</div><br></div></div><blockquote type="cite">

<div><div></div><div class="h5"><div style="word-wrap:break-word"><div><div>On May 16, 2011, at 4:54 AM, Dmitry A. Soshnikov wrote:</div><br><blockquote type="cite">
<div text="#000000" bgcolor="#ffffff">
    On 16.05.2011 10:49, Brendan Eich wrote:
    <blockquote type="cite">
      <div>
        <div>On May 15, 2011, at 10:01 PM, Brendan Eich wrote:</div>
        <br>
        <blockquote type="cite">
          <div style="word-wrap:break-word"><a href="http://wiki.ecmascript.org/doku.php?id=strawman:classes_with_trait_composition#open_issues" target="_blank">http://wiki.ecmascript.org/doku.php?id=strawman:classes_with_trait_composition#open_issues</a>
            <div><br>
            </div>
            <div>This looks pretty good at a glance, but it's a <i>lot</i>,
              and it's new.</div>
          </div>
        </blockquote>
        <div><br>
        </div>
        Looking closer, I have to say something non-nit-picky that looks
        bad and smells like committee:</div>
      <div><br>
      </div>
      <div><a href="http://wiki.ecmascript.org/doku.php?id=strawman:classes_with_trait_composition#inheritance" target="_blank">http://wiki.ecmascript.org/doku.php?id=strawman:classes_with_trait_composition#inheritance</a></div>


      <div><br>
      </div>
      <div>Two kinds of inheritance, depending on the dynamic type of
        the result of evaluating the //MemberExpression// on the right
        of ''extends''? That will be confusing.</div>
      <div><br>
      </div>
      <div>Is the traits-composition way really needed in this proposal?
        If so, then please consider not abuse ''extends'' to mean
        ''compose'' depending on dynamic type of result of expression to
        its right.</div>
      <div><br>
      </div>
    </blockquote>
    <br>
    Some simple examples of all use-cases would are needed I think.<br>
    <br>
    Regarding `new` keyword for the constructor (aka initializer), after
    all, it als may be OK. E.g. Ruby uses `new` as exactly the method of
    a class -- Array.new, Object.new, etc. Though,  `constructor` is
    also good yeah.<br></div></blockquote><div><br></div>My point is not to bikeshed, rather (a) to name existing prototype properties minimally, (b) to avoid preempting other names.</div><div><br></div><div>Good, bad, or in between, the prototypal pattern in JS for constructor C binds C.prototype.constructorr to C. It does not bind C.prototype.new.</div>

<div><br></div><div><br><blockquote type="cite"><div text="#000000" bgcolor="#ffffff">Regarding two inheritance types, I think better to make nevertheless
    one inheritance type -- linear (by prototype chain). And to make
    additionally small reusable code units -- mixins or traits -- no
    matter. Thus, of course if they will also be delegation-based and
    not just copy-own-properties, then we automatically get a sort of
    multiple inheritance.<br></div></blockquote><div><br></div>Self has multiple prototypes and you can use them for all kinds of inheritance patterns.</div><div><br></div><div><a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.28.1447&rep=rep1&type=pdf" target="_blank">Parents are Shared Parts...</a></div>

<div><br></div><div><a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.28.1447&rep=rep1&type=pdf" target="_blank"></a><a href="http://citeseer.ist.psu.edu/viewdoc/download;jsessionid=77703261C2A470793139A1F79D8467AC?doi=10.1.1.127.5320&rep=rep1&type=pdf" target="_blank">Organizing programs without classes</a></div>

<div><br></div><div><a href="http://citeseer.ist.psu.edu/viewdoc/download;jsessionid=77703261C2A470793139A1F79D8467AC?doi=10.1.1.127.5320&rep=rep1&type=pdf" target="_blank"></a><br><blockquote type="cite"><div text="#000000" bgcolor="#ffffff">

Delegation-based mixins though can be implemented as a library using
    proxies (example:
    <a href="https://github.com/DmitrySoshnikov/es-laboratory/blob/master/examples/mixin.js" target="_blank">https://github.com/DmitrySoshnikov/es-laboratory/blob/master/examples/mixin.js</a>,
    implementation:
    <a href="https://github.com/DmitrySoshnikov/es-laboratory/blob/master/src/mixin.js" target="_blank">https://github.com/DmitrySoshnikov/es-laboratory/blob/master/src/mixin.js</a>,
    notice I also used Object.new :)).<br></div></blockquote><div><br></div>Proxies are too costly, though. They always have a handler full of traps. The idea with classes is to capture prototypal inheritance as used today. The idea with traits is to make composition flexible, with fast failure on conflict and tools to rename around conflicts.</div>

<div><br></div><div>Putting classes and traitts together should be doable but it shouldn't use the same sytnax (extends) and it shouldn't require proxies.</div><div><br></div><div>/be</div></div></div></div><div class="im">

_______________________________________________<br>es-discuss mailing list<br><a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br><a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>

</div></blockquote></div><br></div>
<br>_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
<br></blockquote></div><br></div></div>