On Mon, Mar 2, 2015 at 5:54 PM, Allen Wirfs-Brock <[email protected]> wrote:
> I didn't take the time to come up with a real example.  But code within a 
> class body that refers to the containing class is something I have seem many 
> times.  Some of the most common places you see this is in methods (instance 
> or static) referring to "constants" defined as static properties of the 
> class.  Another place you see it is "static" methods referring to other 
> static methods of the same class or applying 'new' to their class name.  In 
> most of these cases, there are actually better ways to do the same thing 
> (referring to 'this' from within static methods, using 'this.constructor' 
> within instance3 method) but many developer still use the direct name 
> references.

Yes, we agree on all this. What's a bug is `Bar = { };`.

> Of course, using 'new this.construtor' internally would also break your 
> logging wrapper.

The wrapper could be either a subclass (which will work inasmuch as a
subclass can substitute for the base class) or a proxy (which will
work inasmuch as a proxy can substitute for its target object). Or it
could just mutate the constructor link.

> Which brings us back to what should probably be the major point..  Class are 
> supposed to be abstractions that encapsulate their internal implementation 
> details.  Expecting that sort of wrapper to work an any sort of general 
> situation is grossly violating that encapsulation.

Hmm. Usually the stronger an abstraction, the *better* wrapping works.
It's funny that it turns out not to work that way in this case.

To me, what's happening here is that the double-binding design is
just... weird. So unsurprisingly, it has weird consequences for users.
I don't think it even matters where one stands on the
classes-as-sugar/classes-as-abstraction spectrum.

-j
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to