<div dir="ltr"><br><div class="gmail_extra"><div class="gmail_quote">On Tue, Jun 17, 2014 at 3:21 PM, Jason Orendorff <span dir="ltr"><<a href="mailto:jason.orendorff@gmail.com" target="_blank">jason.orendorff@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Allen asked me to fill out what @@new would mean. Here it is.<br></blockquote><div><br></div><div>... snip ...<br></div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
The "super Arguments" call syntax in the ES6 drafts would be constrained to<br>
appear only at the top of a constructor, as in Java:<br>
<br>
    class PowerUp {<br>
        constructor(name, price) { ... }<br>
    }<br>
<br>
    class RocketPack extends PowerUp {<br>
        constructor() {<br>
            super("Rocket Pack", 1000);<br>
            this.fuel = FULL_TANK;<br>
        }<br>
    }<br>
<br>
The RocketPack constructor would behave like this:<br>
<br>
        static [Symbol.new]() {<br>
            var obj = super[Symbol.new]("Rocket Pack", 1000);<br>
            obj.fuel = FULL_TANK;<br>
            return obj;<br>
        }</blockquote><div><br></div><div>How would<br><br></div><div>    constructor() {<br></div><div>        if (rand() > 0.5)<br></div><div>            super("A");<br></div>    }<br><div><br></div><div>behave? What about<br>
<br></div><div>    constructor() {<br></div><div>        if (0)<br></div><div>            super();<br></div><div>    }<br><br>?<br><br></div><div>This is a common trick in some languages that silently insert a super(); call if they didn't appear somewhere in the constructor to make sure that super() is always called.<br>
<br></div><div>We could prevent this behavior by making sure that super(); must be the first statement in a constructor, but that means that the subclass can't really influence the parent constructor execution at all.<br>
<br></div><div>The other option is to ask users to always chain up in their constructor, like they need to do in any other overridden method.<br><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

_______________________________________________<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>
</blockquote></div><br><br clear="all"><br>-- <br>  Jasper<br>
</div></div>