May the defineProperty method of a proxy handler throw a TypeError?

Tom Van Cutsem tomvc.be at gmail.com
Mon Jun 20 01:13:07 PDT 2011


2011/6/19 Mark S. Miller <erights at google.com>

> On Sun, Jun 19, 2011 at 8:22 AM, Tom Van Cutsem <tomvc.be at gmail.com>wrote:
>
>> But before continuing this discussion, I'd like to take measure of how
>> important it actually is for the Proxy API to be able to faithfully emulate
>> ES5.1 reject behavior in non-strict mode. Say some non-strict ES5.1 code is
>> executing Object.defineProperty(...) on a proxy and it throws a TypeError
>> rather than failing silently. Is that a big deal or just a minor annoyance?
>>
>
> There might be a misunderstanding here. If ES5.1 strict or non-strict code
> explicitly calls Object.defineProperty(...) then (15.2.3.6 step 4) the
> [[DefineOwnProperty]] method is called with a Throw  argument of true. So a
> failed explicit call to Object.defineProperty(...) always throws, regardless
> of the strictness of its caller.
>
> To do otherwise would be to make the dynamic scoping mistake,
> since Object.defineProperty is first class, not a special form.
>

You're right, the problem is not with Object.defineProperty but rather with
[[Put]] / the set trap (since it defaults to [[DefineOwnProperty]] / the
defineProperty trap, and it is dependent on the strictness of the caller).
But my question remains: how important is it for a Proxy to be able to
faithfully emulate the reject behavior of assignment in non-strict code? If
it is important then we should probably have the defineProperty trap return
a success value, just like delete or set.

Cheers,
Tom
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20110620/0fa9f9f6/attachment.html>


More information about the es-discuss mailing list