<div dir="ltr"><span style="font-family:arial,sans-serif;font-size:13px">Thanks for your response, Allen. I'm not sure what convincing I can do. To me it seems odd that `super()` is the same as `super.submit()` but `super` is not the same as `super.submit`, but perhaps to others that seems perfectly fine. An alternative to this suggestion would be `super()` should not be the same as `super.submit()`; and instead `super()` is either illegal or calls `constructor`.</span><br>
<div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">Brett.</span></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">
On Wed, Aug 6, 2014 at 11:37 AM, Allen Wirfs-Brock <span dir="ltr"><<a href="mailto:allen@wirfs-brock.com" target="_blank">allen@wirfs-brock.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"><br><div><div class=""><div>On Aug 5, 2014, at 6:06 PM, Brett Andrews wrote:</div><br><blockquote type="cite"><div dir="ltr"><div style="font-family:arial,sans-serif;font-size:13px">Some differences/oddities I noticed between referencing and invoking `super`. I briefly discussed this with Erik Arvidsson at <a href="https://github.com/google/traceur-compiler/issues/1220" target="_blank">https://github.com/google/traceur-compiler/issues/1220</a>. In essence, if you can invoke in two seperate ways, it seems logical that you should be able to reference in those two ways (super() ~= super.submit(); super != super.submit).</div>

<div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">```</div><div style="font-family:arial,sans-serif;font-size:13px">class ClientForm extends Form{</div>

<div style="font-family:arial,sans-serif;font-size:13px">  submit() {</div><div style="font-family:arial,sans-serif;font-size:13px">    super.submit(); // Invokes Form.submit</div><div style="font-family:arial,sans-serif;font-size:13px">

    let superSubmit = super.submit; // Reference to Form.submit</div><div style="font-family:arial,sans-serif;font-size:13px">    superSubmit(); // Invokes, but `this` is now undefined; not sure if intended</div></div></blockquote>
<div><br></div></div><div>just like:</div><div>        this.submit(); // Invokes ClientForm.submit</div><div>        let thisSubmit = this.submit;  //Reference to ClientForm.submit</div><div>        thisSubmit();   //invokes, but 'thts' in now undefined</div>
<div><br></div><div>This is how properties and method invocations work in JS.  All that the use of 'super' does is change the place the property lookup starts.  Otherwise 'super' is equivalent to 'this' in the above code.</div>
<div><br></div><blockquote type="cite"><div dir="ltr"><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">    super(); // Invokes Form.submit</div></div>
</blockquote><div>semantically equivalent to</div><div>         super.submit();</div>just a short cut<div class=""><br><br><blockquote type="cite"><div dir="ltr"><div style="font-family:arial,sans-serif;font-size:13px">    let superSubmit2 = super; // Error: "Unexpected token ;"</div>
</div></blockquote><div><br></div></div><div>in some languages, such a unqualified 'super' reference would be equivalent to 'this'.</div><div>We intentionally made it an error for that reason.  I perhaps could be convinced that it should mean the same as 'super.submit'.</div>
<div>But in that case,</div><div>    superSubmit2()</div><div>would still not be the same thing as</div><div>    super();</div><div>or </div><div>     super.submit();</div><div><br></div><div>Allen</div></div></div></blockquote>
</div><br></div>