Hmm....

On Jun 26, 2014, at 9:57 AM, Claude Pache wrote:

> 
>     let C be some constructor
>     let D = C.bind(obj, a, b)
> 
> Thanks to the carefully designed `D.[[Construct]]` internal method, the 
> following expressions are equivalent:

Hmm....and showing that perhaps is isn't so easy to get rid of [[Construct[[

> 
>     new D(...args)
>     new C(a, b, ...args)
> 
> Consider now:
> 
>     class E extends D {
>         contructor(...args) {
>             super(...args)
>         }
>     }
> 
> As I understand, `super(...args)` calls `D.[[Call]](this, args)`, which in 
> turn calls `C.[[Call]](obj, [a, b, ...args])`. But what we probably want 
> here, is  `C.[[Call]](this, [a, b, ...args])`.
> 
> I am missing something or is there an issue?

Yes, this analysis is correct and an unfortunate effect of F.p.bind conflating 
the binding of the this value with partial application of the arguments.

I don't see anyway around this given the current designs for classes and for 
bound functions. 

Given that such a bound function can't really be super invoked as an instance 
initializer perhaps we should make an an error for a class definition extends 
clause to evaluate to a bound function. We alway throw, it the "superclass" is 
not a constructor so adding an additional check to see whether the "superclass" 
is bound would be a small addition.

Allen


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

Reply via email to