Class double-bind

Mark S. Miller erights at google.com
Mon Mar 2 21:12:46 UTC 2015


All else being equal, your suggestion seems like the obviously right thing,
on at least consistency and least surprise grounds.

I know we discussed this. Anyone remember why we didn't do what Jason
suggests? My memory of counter-arguments here is blank.




On Mon, Mar 2, 2015 at 1:07 PM, Jason Orendorff <jason.orendorff at gmail.com>
wrote:

> Classes are specified to have an immutable inner binding even if they
> also declare a mutable lexical binding in the enclosing scope:
>
>     class Foo {
>         foo() {
>             // immutable inner binding 'Foo' is in scope here
>         }
>     }
>     // mutable lexical binding 'Foo' is in scope here
>
> Having two bindings can be tricky. Suppose I then do this:
>
>     Foo = wrapConstructorWithExtraLogging(Foo);
>
> Now the two bindings have different values. If one of Foo's methods
> does `new Foo`, we don't get the extra logging.
>
> Can we go back to having classes do what functions do? A single
> function never introduces two bindings; rather a named function
> expression has only the immutable inner binding and a function
> declaration only declares a variable.
>
> -j
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>



-- 
    Cheers,
    --MarkM
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20150302/40c4b599/attachment.html>


More information about the es-discuss mailing list