<div dir="auto">I see, so it's not that you can't do things without class as much as you can impose limitations by using class. Thanks for clarifying</div><br><div class="gmail_quote"><div dir="ltr">Le lun. 23 juill. 2018 18 h 49, Jordan Harband <<a href="mailto:ljharb@gmail.com">ljharb@gmail.com</a>> a écrit :<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">When extending builtins, `super()` is the only way you can get the appropriate internal slots applied to the instance. (Private fields work the same way by providing a matching guarantee - that the only way someone can subclass you successfully is using `class extends` and `super`)</div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jul 23, 2018 at 3:43 PM, Ben Wiley <span dir="ltr"><<a href="mailto:therealbenwiley@gmail.com" target="_blank" rel="noreferrer">therealbenwiley@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 dir="auto"><div>What exactly can be accomplished with super that can't be accomplished otherwise? I know the transpiled code is very verbose and unintuitive to read if you avoid explicitly naming the base class, but I wasn't aware of new capabilities that were previously impossible.<span class="m_-420319614581409479HOEnZb"><font color="#888888"><div dir="auto"><br></div><div dir="auto">Ben</div></font></span><div><div class="m_-420319614581409479h5"><br><br><div class="gmail_quote"><div dir="ltr">Le lun. 23 juill. 2018 18 h 06, Ranando King <<a href="mailto:kingmph@gmail.com" target="_blank" rel="noreferrer">kingmph@gmail.com</a>> a écrit :<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Granted about `super()`. That's the one thing I can't easily reproduce. However, barring those internal slots, I can reproduce the functionality of `super` and the checks performed as a result of the internal slots, all in ES6. As for built-ins, I can easily and properly extend builtins without `class` since ES6 officially has `Object.setPrototypeOf()`. If you don't think it's possible, you should take a close look at what I'm doing in the <a href="http://repl.it" rel="noreferrer noreferrer" target="_blank">repl.it</a> link from my first post.<div><br></div><div>As for whether or not the sugary nature of `class` is a good thing, it really is a matter of opinion. I just happen to be of the persuasion that since there's literally no construct that `class` can produce that I cannot reproduce by other means, then that means the `class` keyword (even in light of `super`) is little more than syntactic sugar. As such, we shouldn't be so hasty to turn an Object Oriented Prototype Based language into an Object Oriented Class Based language. The only way to do that reasonably is to ensure that whatever you can construct with `class` can always be equivalently constructed without it.</div><div><br></div><div>Here's a more logical argument instead. Even if there are subtle differences between `class` constructors and object factory functions, providing an isolated path specific to `class` is likely to lead to situations very similar to what happens when an open source package gets forked. Eventually, the difference between the two paths may become so great that one is eventually abandoned (by developers) in favor of the other. This is only a valid argument because the power of ES is in it's simplicity. It's like building a house with wood, nails, sheetrock, etc... (JS) vs. building a house with pre-fabricated parts (class-based languages).</div><div><br></div><div>Don't get me wrong. The `class` keyword is a great thing. It simplifies the production of creating object factories with prototypes. As I understand it, that was the purpose. Let's not make the mistake of allowing something to be done with `class` that cannot be reasonably reproduced without it. The moment we do that, we're diverging from the intended purpose of `class`.<br><div><br></div><div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr">On Mon, Jul 23, 2018 at 4:17 PM Jordan Harband <<a href="mailto:ljharb@gmail.com" rel="noreferrer noreferrer" target="_blank">ljharb@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Extend builtins, in particular - ie, `super()` allows your subclass to obtain internal slots it can't otherwise get.<div><br></div><div>Even if `class` were just sugar, I don't think I see the argument that that's a *good* thing to preserve.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jul 23, 2018 at 2:05 PM, Ranando King <span dir="ltr"><<a href="mailto:kingmph@gmail.com" rel="noreferrer noreferrer" target="_blank">kingmph@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="m_-420319614581409479m_4812340097174105786m_2016505130284905872m_5431187541811288062HOEnZb"><div class="m_-420319614581409479m_4812340097174105786m_2016505130284905872m_5431187541811288062h5"><div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">---------- Forwarded message ---------<br>From: <strong class="gmail_sendername" dir="auto">Ranando King</strong> <span dir="ltr"><<a href="mailto:kingmph@gmail.com" rel="noreferrer noreferrer" target="_blank">kingmph@gmail.com</a>></span><br>Date: Mon, Jul 23, 2018 at 4:04 PM<br>Subject: Re: proposal: Object Members<br>To:  <<a href="mailto:ljharb@gmail.com" rel="noreferrer noreferrer" target="_blank">ljharb@gmail.com</a>><br></div><br><br><div dir="ltr">You've made that argument before. Exactly what is it in ES6 that you **can** do with `class` that you cannot do without class? I'd like some clarification on this.</div><br><div class="gmail_quote"><div dir="ltr">On Mon, Jul 23, 2018 at 3:30 PM Jordan Harband <<a href="mailto:ljharb@gmail.com" rel="noreferrer noreferrer" target="_blank">ljharb@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">`class` is already not just syntactic sugar, so that notion isn't correct, and shouldn't be maintained.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jul 23, 2018 at 12:38 PM, Ranando King <span dir="ltr"><<a href="mailto:kingmph@gmail.com" rel="noreferrer noreferrer" target="_blank">kingmph@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 dir="ltr">I've written up a new draft proposal based on my own work with ES5 & ES6 compatible classes with fields. That can be found [here](<a href="https://github.com/rdking/proposal-object-members" rel="noreferrer noreferrer" target="_blank">https://github.com/rdking/proposal-object-members</a>). I'm already aware of the class-members proposal, but I think it breaks far to many things and doesn't do anything to maintain the notion that "`class` is just syntactic sugar".<div><br></div><div>This proposal is specifically based on the code [here](<a href="https://github.com/rdking/Class.js/tree/master/es6c" rel="noreferrer noreferrer" target="_blank">https://github.com/rdking/Class.js/tree/master/es6c</a>). I've also got a [<a href="http://repl.it" rel="noreferrer noreferrer" target="_blank">repl.it</a>](<a href="https://repl.it/@arkain/Classjs-Compact-Syntax-ES6" rel="noreferrer noreferrer" target="_blank">https://repl.it/@arkain/Classjs-Compact-Syntax-ES6</a>) that shows the same code running. </div><div><br></div><div>The idea behind the proposal is that instead of injecting a lot of new logic into how `class` works, let's allow `class` to remain syntactic sugar, and put that extra ability into object declarations instead. Then simply allow `class` to do the same with it's own prototypes.</div></div>
<br>_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" rel="noreferrer noreferrer" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer noreferrer noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
<br></blockquote></div><br></div>
</blockquote></div>
</div></div>
</div></div><br>_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" rel="noreferrer noreferrer" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer noreferrer noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
<br></blockquote></div><br></div>
</blockquote></div>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" rel="noreferrer noreferrer" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer noreferrer noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div></div></div></div></div>
</blockquote></div><br></div>
</blockquote></div>