proposal: Object Members

Ben Wiley therealbenwiley at
Mon Jul 23 22:52:27 UTC 2018

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 <ljharb at> 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 <therealbenwiley at>
> 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 <kingmph at> 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
>>> 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 <ljharb at> 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 <kingmph at>
>>>> wrote:
>>>>> ---------- Forwarded message ---------
>>>>> From: Ranando King <kingmph at>
>>>>> Date: Mon, Jul 23, 2018 at 4:04 PM
>>>>> Subject: Re: proposal: Object Members
>>>>> To: <ljharb at>
>>>>> 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 <ljharb at>
>>>>> 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 <kingmph at>
>>>>>> 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](
>>>>>>> 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](
>>>>>>> I've also got
>>>>>>> a [](
>>>>>>> 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
>>>>>>> es-discuss at
>>>>> _______________________________________________
>>>>> es-discuss mailing list
>>>>> es-discuss at
>>>> _______________________________________________
>>> es-discuss mailing list
>>> es-discuss at
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the es-discuss mailing list