@strict class decorator

Naveen Chawla naveen.chwl at gmail.com
Tue Aug 8 06:32:20 UTC 2017


Ah great! So then how about having a `@seal` and/or `@preventExtensions`
decorator as a shorthand?

I accept that IDEs can only do so much in checking your code, and beyond
that, you're on your own...

Secretly I want Javascript to become like TypeScript... all optional,
backwards compatible, etc.

On Tue, 8 Aug 2017 at 11:16 Darien Valentine <valentinium at gmail.com> wrote:

> For a class which is not intended to be subclassable, this can be done
> today
> with `Object.preventExtensions()` or `Object.seal()`, depending on your
> intent:
>
>     class Foo {
>       constructor() {
>         this.bar = 1;
>         this.baz = 2;
>
>         Object.preventExtensions(this);
>       }
>     }
>
>     const foo = new Foo();
>
>     foo.bar = 3; // okay
>     foo.qux = 4; // throws in strict mode
>
> But this approach doesn’t work when subclassing is or may be in play. It’s
> also not
> directly possible with the decorator proposal as it stands today — but
> there has
> been discussion of it and it sounds like it’s something that’s on people’s
> minds:
>
> [2017 July 27](
> http://tc39.github.io/tc39-notes/2017-07_jul-27.html#11ive-interaction-of-privacy-fields-and-decorators
> )
>
> > DE: Omitted features: instance finishers. Yehuda?
> >
> > YK: an instance finisher is a function that is executed at the end of
> > instantiation of the class at any subclass level and passes at the
> > instance. this is at the end of Reflect.construct. the use case is a
> > decorator to confirm that all instances are frozen or sealed. Another:
> > you want to register created instance into a map. The subclass provides
> > the key, the superclass expresses that the instance should be registered.
> >
> > DE: instance finishers change how instances are created. It's
> > complicated and so wants to separate it out.
>
> ...looking forward to this, too.
> _______________________________________________
> 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/20170808/53dc688c/attachment.html>


More information about the es-discuss mailing list