> On Mar 30, 2015 10:54 AM, Axel Rauschmayer <a...@rauschma.de> wrote:
> >>>
> >>> ```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.
> >
> >
> > In general, I’d expect this kind of subclassing to fail, due to the new 
> > instantiation protocol. Wrong?
> 
> Would work fine if throw semantics removed and invoked as
> ```js
> new MySubConstructor();
> ```
> Just like ES5.
> 
> If invoked as
> ```js
> MySubConstructor();
> ```
> would fail just like ES5.
> 
> Throwing on [[Call]] is a compatibility hazard.
> 


Don’t the different assumptions as to where the instance is allocated ever 
clash here? What if `MySuperClass` were:

```js
class MySuperClass extends Error {
}
```

-- 
Dr. Axel Rauschmayer
a...@rauschma.de
rauschma.de



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

Reply via email to