<div dir="ltr">> <span style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">Private fields also won't work as expected...</span><div><span style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br></span></div><div><span style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">Can you clarify what you're referring to? I've created a library that essentially implements the functional parts of what I intend with this proposal. Of course the syntax isn't the same, and Proxy was used to create a membrane between the public and private storage, and I can't prevent that proxy from being passed to external functions, but those are ES-specific implementation details and not how it would be implemented in the engine.</span></div><div><span style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br></span></div><div><span style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">> <span style="background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span> ... </span>the mandatory super call in constructor is also different from ES5.</span></span></div><div><span style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br></span></span></div><div><span style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">You shouldn't really try to compare ES5 and ES6. My statement that "`class` is syntactic sugar" refers to the fact that anything you can do with `class` in ES6 can also be done without `class` in ES6.</span></span></div><div><span style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br></span></span></div><div><span style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">> <span style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">P.S. Babel mistakenly sold classes as "just sugar" and never worked properly with Custom Elements and builtins extend until version 7 which is still not perfect but at least it doesn't throw errors for no reason.</span></span></span></div><div><span style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br></span></span></span></div><div><span style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">Just because `class` is essentially syntactic sugar doesn't mean that the desugaring is backwards compatible with older versions of the language. I do not wish to imply that. Nor do I see the need to make such a statement true. Such an attempt to enforce backwards compatibility to that degree would prove excessively burdensome on the process of improving and adding features to the language.</span></span></span></div></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Jul 24, 2018 at 9:41 AM Andrea Giammarchi <<a href="mailto:andrea.giammarchi@gmail.com">andrea.giammarchi@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">Private fields also won't work as expected and the mandatory super call in constructor is also different from ES5. Let's add species and special class related Symbol so that it makes no sense to define classes "just sugar" + there's no point in avoiding classes at all costs when any of these features is needed.<div><br></div><div>Regards</div><div><br></div><div>P.S. Babel mistakenly sold classes as "just sugar" and never worked properly with Custom Elements and builtins extend until version 7 which is still not perfect but at least it doesn't throw errors for no reason</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Jul 24, 2018 at 4:15 PM Ranando King <<a href="mailto:kingmph@gmail.com" target="_blank">kingmph@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">@ljharb: It seems you now understand what I was trying to say. Sadly, I'm not always the most eloquent.<br><div><br></div><div>> <span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span> <span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">As you've all pointed out, it's not "just sugar" in the sense that you couldn't do it in ES5;<span> </span></span></span>it's more that parallel syntax and API were created for the new functionality in ES6.</span></div><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br></span></div><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">The intent of my proposal is to provide both member fields and privilege levels to the `class` keyword, and the equivalent for object literals in a way that meets with both an intuitive declaration style, and a reasonable access notation that breaks as little as few as possible of the developers expectations of what can and can't be done.</span></div></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Jul 24, 2018 at 3:18 AM Jordan Harband <<a href="mailto:ljharb@gmail.com" 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">As you've all pointed out, it's not "just sugar" in the sense that you couldn't do it in ES5; it's more that parallel syntax and API were created for the new functionality in ES6. Thanks for providing clear code examples of how one might extend builtins without `class`.<br><div><br></div><div>@kai: yes, extending builtins makes sense, in that it's an important part of ES6. Invoking "the web" doesn't negate *any* of the features of the language, new or old. Separately, not every web use involves any JSON serialization in either direction.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jul 24, 2018 at 12:15 AM, T.J. Crowder <span dir="ltr"><<a href="mailto:tj.crowder@farsightsoftware.com" target="_blank">tj.crowder@farsightsoftware.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"><span>On Tue, Jul 24, 2018 at 8:00 AM, Michael Theriot<div><<a href="mailto:michael.lee.theriot@gmail.com" target="_blank">michael.lee.theriot@gmail.com</a>> wrote:<br>> `Reflect.construct` allows subclasses to obtain internal slots without<br>> `super()` / class syntax.<br><br></div></span><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">Indeed, Darien pointed that out as well (and if you two hadn't, I would have. :-)</span><br></div><span><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br></span></div><div>> This is the first I have heard `class` is anything but sugar.<br><br></div></span><div>The accurate statement would be that `class` lets you do things you couldn't do in ES5. But so does `Reflect.construct`. I believe it was important to the "no `new`" crowd that a non-`class` mechanism existed for creating objects using Error and Array as prototypes.</div><span class="m_6602889693535095397m_-3905076805204871659m_-1275631239331587813HOEnZb"><font color="#888888"><div><br></div><div>-- T.J. Crowder</div></font></span></div>
</blockquote></div><br></div>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div>
</blockquote></div>