Hi,

> I'd like to remind that if Object.getPropertyDescriptor isn't a native
>> function with a native underlying internal method, but a monkey patch, it
>> will not call a proxy trap (maybe this should be addressed?).
>>
>
>  There's a Harmony proposal that proposes adding
> Object.getPropertyDescriptor as a new built-in on Object for precisely this
> reason: <
> http://wiki.ecmascript.org/doku.php?id=harmony:extended_object_api>
>
> I agree.
> The point I wanted to see addressed is when ES engines only partially
> natively implement the Object introspection API. Currently, Safari 5 doesn't
> implement preventExtension/seal/freeze. No browser implement
> getPropertyDescriptor and getPropertyNames (so Object.getPropertyDescriptor
> wouldn't be trapped if monkey-patched).
> If all browsers implement proxies now, the same code will reveal
> inconsistencies if browsers have different stage of Object.* implementation.
> Same thing if new traps are created afterward. It's very unlikely that all
> browser will implement the relevant Object.* method at the same time.
> Maybe we should investigate something like Proxy.trap(o, name, arguments).
> Example:
> ----
> if(typeof Object.getPropertyDescriptor != "function"){
>   Object.getPropertyDescriptor = function(o){
>     if(Proxy.isProxy(o)){ // There is a need to be able to discriminate
>       return Proxy.trap(o, "getPropertyDescriptor"); // call the trap
> manually, because the native code cannot do it.
>       /* For seal/freeze, the trap name has nothing to do with the method
> name and no 1:1 mapping can be done, hence the string argument */
>     }
>     else{
>        // code for regular object
>     }
>   };
> }
> ----
> This has downsides and as always, I'm not going to fight for this
> particular syntax, but I think that there is a need for a mechanism for
> developers to compensate browsers uneven implementations.
> In a world where all browsers would all move at the same pace and older
> browsers market share were dropping as soon as a new version was showing up,
> we wouldn't need such a mechanism, but I don't think we should assume living
> in such a world.
>

Is it really that big an issue?

Considering Object.getPropertyDescriptor, if a shim defines it in terms of a
recursive prototype-chain walk + Object.getOwnPropertyDescriptor, I would
surmise that this leads to correct behavior if the proxy is well-behaved
(i.e. the prototype-chain it emulates is consistent with
|Object.getPrototypeOf(proxy)| ).

If a browser does not support Object.freeze, seal or preventExtensions, it
likely does not support fixing proxies either. Calling the "fix()" trap
explicitly via Proxy.trap would still not lead to the expected behavior.

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

Reply via email to