proposal: Object Members
Jordan Harband
ljharb at gmail.com
Mon Jul 23 22:56:58 UTC 2018
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 <therealbenwiley at gmail.com>
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 <ljharb at gmail.com> 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 gmail.com>
>> 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 gmail.com> 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 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 gmail.com>
>>>> 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 gmail.com>
>>>>> wrote:
>>>>>
>>>>>>
>>>>>>
>>>>>> ---------- Forwarded message ---------
>>>>>> From: Ranando King <kingmph at gmail.com>
>>>>>> Date: Mon, Jul 23, 2018 at 4:04 PM
>>>>>> Subject: Re: proposal: Object Members
>>>>>> To: <ljharb at gmail.com>
>>>>>>
>>>>>>
>>>>>> 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 gmail.com>
>>>>>> 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 gmail.com>
>>>>>>> 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). 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). I've also
>>>>>>>> got a [repl.it](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
>>>>>>>> es-discuss at mozilla.org
>>>>>>>> https://mail.mozilla.org/listinfo/es-discuss
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>> _______________________________________________
>>>>>> es-discuss mailing list
>>>>>> es-discuss at mozilla.org
>>>>>> https://mail.mozilla.org/listinfo/es-discuss
>>>>>>
>>>>>>
>>>>> _______________________________________________
>>>> es-discuss mailing list
>>>> es-discuss at mozilla.org
>>>> https://mail.mozilla.org/listinfo/es-discuss
>>>>
>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20180723/e84479d3/attachment.html>
More information about the es-discuss
mailing list