<br><br><div class="gmail_quote">On Fri, Mar 23, 2012 at 4:17 PM, Brendan Eich <span dir="ltr"><<a href="mailto:brendan@mozilla.org">brendan@mozilla.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">Russell Leggett wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Yeah, that's one of the things that confused me. Brendan specified instance properties, which made me think he was referring to an error that might occur prior to actually evaluating the code.<br>
</blockquote>
<br></div>
Yes, the issue is not the class binding (if the class was declared, rather than expressed). The issue is instance variables. I'm going back to the old syntax from last year that we don't like any longer, which declared i.v.s in the constructor body:<br>

<br>
  class Point extends Evil {<br>
    constructor(ax, ay) {<br>
      public x, y;<br>
            super();<br>
      this.x = ax;<br>
      this.y = ay;<br>
    }<br>
    ...<br>
  }<br>
<br>
The issue is what happens if class Evil looks like this:<br>
<br>
  class Evil {<br>
    constructor() {<br>
console.log(this.x);<br>
    }<br>
  }<br>
<br>
Should undefined by logged, or an error thrown? If the i.v.s are made const, or guarded by guard expressions, does the answer change? Can we do non-const i.v.s now and let undefined be read, and be future-friendly?<br>
<br>
I think we can -- it seems obvious to me.<br>
<br>
But I may be missing something (since we haven't got const i.v.s or guards in Harmony yet, who knows? This is the unfalsifiable limit where we can't do classes until we do other more advanced and uncertain things).<br>

<br>
Also it may be that some on TC39 think the answer to "Should undefined be logged?" for the example above is "no, error thrown". I don't agree with that, it's not how writable properties on objects work in JS.</blockquote>
<div><br></div><div>Ah, makes more sense now. I think there's a lot of room for future work. The current behavior that I think we're agreeing on seems very intuitive with the way JS works now. Future behavior should have more signposts like the "const" keyword would for const i.v.s.</div>
<div><br></div><div>- Russ</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="HOEnZb"><font color="#888888"><br>
<br>
/be<br>
</font></span></blockquote></div><br>