@strict class decorator

Darien Valentine valentinium at gmail.com
Tue Aug 8 05:46:43 UTC 2017

For a class which is not intended to be subclassable, this can be done today
with `Object.preventExtensions()` or `Object.seal()`, depending on your

    class Foo {
      constructor() {
        this.bar = 1;
        this.baz = 2;


    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

[2017 July 27](

> 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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20170808/c46aba3e/attachment.html>

More information about the es-discuss mailing list