<br><br><div class="gmail_quote">On Fri, Sep 14, 2012 at 12:58 PM, Kevin Smith <span dir="ltr"><<a href="mailto:khs4473@gmail.com" target="_blank">khs4473@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 class="gmail_quote"><div class="im"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_quote"><div>The real point I'm trying to make is that Name objects give us something akin to clojure's protocols. Imagine an "orm" protocol -- this is just a set of names that must exist on an object (or its proto chain). An object can implement any number of protocols (or interfaces, or whatever) without fear of conflict. You can easily override any implementation so long as you have a handle on the appropriate name object. This is easier, better looking and more correct than anything we can do today. It's not too disimilar from using using instanceof as a brand, but without the pitfalls (it doesn't fall flat crossing sandbox boundaries). This is a safe and flexible inheritance model that works just as a js programmer would expect, all without begging for mutable or multiple prototypes.</div>


</div></blockquote><div><br></div></div><div>I think this is a winning argument.  So the problem becomes: how can we implement this in a non-fugly way?  As it stands (and as Allen has pointed out), we don't currently have the syntax to make this work, even for "iterator":</div>


<div><br></div><div>    import iterator from "sys:iterator"; // Sorry, hate @'s : )</div><div><br></div><div>    class Derived extends Base {</div><div>    </div><div>      // Hmmm... No way to put iterator here.</div>


<div>    }</div><div><br></div><div>    // Try here?  Fugly...</div><div>    X.prototype[iterator] = function() {</div><div><br></div><div>      super.doSomething(); // Oops - super outside of class definition : (</div><div>


    };</div><div><br></div><div>The absolute minimum we need is a way to specify computed property names in classes (and what the heck, object literals too):</div><div><br></div><div>    import iterator from "sys:iterator";</div>


<div><br></div><div>    class Derived extends Base {</div><div><br></div><div>      [iterator]() {</div><div>        super.doSomething(); // Works like a charm!</div><div>      }</div><div>    }</div><div><br></div><div>

This is IMO the best way forward.  It's generally useful beyond the use case presented here and does not use up a valuable free ASCII character.  It also doesn't require any new symbolism since we already understand that brackets indicate computed property names.  Why were computed property names killed again?</div>

</div></blockquote><div><br></div><div>I can't find any evidence that they were, however I did dig up evidence that they were in fact accepted by everyone at the July 2011 meeting:</div><div><br></div><div><a href="https://mail.mozilla.org/pipermail/es-discuss/2011-August/016188.html">https://mail.mozilla.org/pipermail/es-discuss/2011-August/016188.html</a></div>

<div><br></div><div>search that page for "private-name-alternatives.pdf"</div><div><br></div><div><br></div><div><br></div><div>Rick</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div class="gmail_quote"><span class="HOEnZb"><font color="#888888">
<div><br></div><div>Kevin</div></font></span></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>