[Harmony proxies] [[Construct]] semantics breaks the expectation of seeing an object as return value
David Bruant
david.bruant at labri.fr
Fri Sep 23 06:32:40 PDT 2011
Hi,
In ES5.1 - 13.2.2 is defined functions instances [[Construct]]. As one
can notice, it always returns something of type Object (as per ES5.1 -
8.6). Consequently, a call to "new A()" always reliably either returns
an object or throws an exception.
Proxies semantics of [[Construct]] states that (step 5) the [[Call]]
internal method of constructhandler should be called. It opens the door
to returning things which are not objects (number, boolean, undefined, ...).
I can't think of precedents of this for host objects and I don't really
see a use case in allowing "new A()" to return something else than an object
When writing functions intended to be used as constructors, people may
be used of |this| being used as the to-be-returned object and expect
this behavior even if defining a constructor.
So i would be in favor of adding a type check between step 5 and 6.
David
More information about the es-discuss
mailing list