On Wed, Apr 30, 2014 at 4:06 PM, Allen Wirfs-Brock
<[email protected]> wrote:
>
> On May 1, 2014, at 2:50 AM, Jason Orendorff <[email protected]> wrote:
>
>>
>> As specified, proxies can do this:
>>
>>  js> Object.isFrozen(proxy)
>>  true
>>  js> Object.getOwnPropertyDescriptor(proxy).configurable
>>  true
>
> No, that is not the intent.

André got it right. Here is the proxy I had in mind:

    var proxy = new Proxy(Object.freeze({prop: undefined}), {
        ownKeys: function () {
            return ["prop"];
        },
        getOwnPropertyDescriptor: function name() {
            let n = 0;
            return {get configurable() { return n++ > 0; }, enumerable: true};
        }
    });

Currently in SpiderMonkey:

    js> Object.isFrozen(proxy)
    true
    js> Object.getOwnPropertyDescriptor(proxy, "prop").configurable
    false  // but only because we don't implement [[Origin]]

> Also note that Object.isFrozen is specified to operates at the level of the 
> MOP operations and property descriptor records, not at the 
> Object.getOwnPropertyDescriptor/descriptor object level. It never looks at 
> the object that is passed through [[Origin]].

Agreed.

> It isn’t clear exactly what you intend by the above snippet (does proxy have 
> a ‘getOwnPropertyDescriptorHandler’? did you really mean to use undefined as 
> the property key?).

Oh. No to the latter. Sorry for the typo!

> In either case, if the object passes the criteria for isFrozen then then the 
> con configurable attribute of the resulting descriptor (if the property 
> exists) must be false and consistent with the target.

The only inconsistency here is that Object.getOwnPropertyDescriptor is
returning an [[Origin]] object which is then tricking the end user.

-j
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to