Hi,

As you know, as specified in ES6 (or should I say ES 2015?), constructors 
defined through the `class` construct cannot be invoked with a preallocated 
object, i.e., invoked as `Foo.call(obj)` instead of `obj = new Foo`.

I have reflected on how to make that just work, but without failing silently 
on, e.g., builtins. Here are the result of my thoughts:

https://gist.github.com/claudepache/ca20472f050443644f29

Basically, constructors (ES functions with a [[Construct]] internal slot) are 
distinguished between those that can be invoked on a preallocated object (e.g., 
`function foo(baz) { this.bar = baz }`) and those that cannot (e.g., the `Map` 
builtin). Then, the semantics of `super()` inside class constructors is 
carefully reviewed in order to just work for class constructors invoked as 
`Foo.call(obj)`, and to protest when attempting to do impossible things with, 
e.g., `Map` or `Array`.

―Claude


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

Reply via email to