Issue when subclassing a bound function used as constructor

Allen Wirfs-Brock allen at
Thu Jun 26 10:47:36 PDT 2014


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.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the es-discuss mailing list