> Le 30 mars 2015 à 10:46, Allen Wirfs-Brock <al...@wirfs-brock.com> a écrit :
> 
>> 
>> On Mar 30, 2015, at 10:12 AM, Axel Rauschmayer <a...@rauschma.de> wrote:
>> 
>>>> It doesn’t seem that big of a deal, but one risk is: people mistaking a 
>>>> class for a constructor, trying to subclass it as if it were a constructor 
>>>> and things failing silently.
>>>> 
>>> Can you give an example of what you mean?
>> 
>> ```js
>> class MySuperClass {}
>> 
>> // This function assumes that MySuperClass is an ES5 constructor function
>> function MySubConstructor(foo) {
>>    MySuperClass.call(this);
>>    this.foo = foo;
>> }
>> MySubConstructor.prototype = Object.create(MySuperClass.prototype);
>> MySubConstructor.prototype.constructor = MySubConstructor;
>> ```
> 
> so if MySuperCall didn’t have the throw on [[Call]] behavior the above would 
> work just fine.
> 
> Allen

I see an issue when MySuperClass contains itself a super() invocation... at 
least when that super-class is some builtin that doesn't support initialisation 
of pre-allocated instances, like `Array`. As currently specified, it will just 
throw, which is at least safe. It would be interesting to make it just work 
without hacks such as `if (new.target) super(); else super.constructor(...);`, 
and, in the same time, without silently break with `Array`, etc.

—Claude
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to