Hello,
now that we have symbols (and use some of them language-wise, like
@iterator or proposed @toStringTag), I'd say we can probably dissect
[[Call]] and [[Construct]] semantics fairly easily. Assuming there are
global constant symbols @construct and @call, for min-max classes the
issue is very simple:
class Foo {
@construct(bar) {
this.bar = bar;
}
@call() {
// do something else
}
}
I'd propose the above as the minimal proposal for [[Call]] and
[[Construct]] separation (even when it only works for classes; and so
they can be abused to create function with [[Call]] and [[Construct]]
separated).
Implementation would be to create Foo such that it chooses one or the
other based on whether [[Call]] or [[Construct]] is invoked.
It could go further, like this:
var f = { @construct() {console.log(1)}, @call() {console.log(2)} };
f(); // logs 2
new f; // logs 1
In case of "native functions" (function, =>) do [[Call]] and
[[Construct]] as today, in case of objects, check for @construct / @call
presence.
But this has some quirks to solve, like typeof must be "function" for
every object having @call, but what about object having only @construct?
Thanks, Herby
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss