> Extend builtins, in particular - ie, `super()` allows your subclass to obtain > internal slots it can't otherwise get.
does extending builtins in the javascript-language even make sense, given the dominant industry application of it in a web-context? as i've said before, the primary industry-painpoints with javascript are integration-related, namely serializing/reconstructing JSON data between client <-> server. whatever low-level benefit you gain from extending builtins, typically is not worth the extra high-level integration-cost of serializing/reconstructing these custom data-structures to/from JSON. p.s. - as an aside, new primitives like BigInt should have focused more on ease-of-use with JSON-serialization. BigInt’s primary use-case in industry as i see it, is as a mechanism for JSON-serializing 64-bit integers between client <-> server <-> database. kai zhu [email protected] > On 24 Jul 2018, at 5:56 AM, Jordan Harband <[email protected]> wrote: > > That, and that the existing builtins already impose those limitations - and > only `class` allows you to do those things, with them. > > On Mon, Jul 23, 2018 at 3:52 PM, Ben Wiley <[email protected] > <mailto:[email protected]>> wrote: > 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 > > Le lun. 23 juill. 2018 18 h 49, Jordan Harband <[email protected] > <mailto:[email protected]>> a écrit : > 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`) > > On Mon, Jul 23, 2018 at 3:43 PM, Ben Wiley <[email protected] > <mailto:[email protected]>> wrote: > 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. > > Ben > > > Le lun. 23 juill. 2018 18 h 06, Ranando King <[email protected] > <mailto:[email protected]>> a écrit : > 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 > repl.it <http://repl.it/> link from my first post. > > 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. > > 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). > > 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`. > > > > On Mon, Jul 23, 2018 at 4:17 PM Jordan Harband <[email protected] > <mailto:[email protected]>> wrote: > Extend builtins, in particular - ie, `super()` allows your subclass to obtain > internal slots it can't otherwise get. > > Even if `class` were just sugar, I don't think I see the argument that that's > a *good* thing to preserve. > > On Mon, Jul 23, 2018 at 2:05 PM, Ranando King <[email protected] > <mailto:[email protected]>> wrote: > > > ---------- Forwarded message --------- > From: Ranando King <[email protected] <mailto:[email protected]>> > Date: Mon, Jul 23, 2018 at 4:04 PM > Subject: Re: proposal: Object Members > To: <[email protected] <mailto:[email protected]>> > > > 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. > > On Mon, Jul 23, 2018 at 3:30 PM Jordan Harband <[email protected] > <mailto:[email protected]>> wrote: > `class` is already not just syntactic sugar, so that notion isn't correct, > and shouldn't be maintained. > > On Mon, Jul 23, 2018 at 12:38 PM, Ranando King <[email protected] > <mailto:[email protected]>> wrote: > 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](https://github.com/rdking/proposal-object-members > <https://github.com/rdking/proposal-object-members>). 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". > > This proposal is specifically based on the code > [here](https://github.com/rdking/Class.js/tree/master/es6c > <https://github.com/rdking/Class.js/tree/master/es6c>). I've also got a > [repl.it > <http://repl.it/>](https://repl.it/@arkain/Classjs-Compact-Syntax-ES6 > <https://repl.it/@arkain/Classjs-Compact-Syntax-ES6>) that shows the same > code running. > > 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. > > _______________________________________________ > es-discuss mailing list > [email protected] <mailto:[email protected]> > https://mail.mozilla.org/listinfo/es-discuss > <https://mail.mozilla.org/listinfo/es-discuss> > > > > _______________________________________________ > es-discuss mailing list > [email protected] <mailto:[email protected]> > https://mail.mozilla.org/listinfo/es-discuss > <https://mail.mozilla.org/listinfo/es-discuss> > > > _______________________________________________ > es-discuss mailing list > [email protected] <mailto:[email protected]> > https://mail.mozilla.org/listinfo/es-discuss > <https://mail.mozilla.org/listinfo/es-discuss> > > > _______________________________________________ > es-discuss mailing list > [email protected] > https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

