Proxy .__proto__ is not getPrototypeOf?

Allen Wirfs-Brock allen at
Mon May 5 11:44:27 PDT 2014

On May 5, 2014, at 10:40 AM, John Barton wrote:

> I'm hoping someone can explain this result which surprises me.
> If I create an object with a Proxy-ed prototype, the resulting object does not obey .__proto__ equal Object.getPrototypeOf().
> For example:
>   var aPrototype = {foo: 'foo'};
>   var handler = {
>     get: function(target, name, receiver) {
>       console.log('   (Proxy handler \'get\' called for name = ' + name + ')');
>       return target[name];

the above line needs to be:
                 return Reflect.get(target, name, receiver);

Object.prototype.__proto__ is an accessor property and to work correctly it needs to have the originally accessed object passed at the this value.  That's why 'get' handlers (and others) have a 'receiver' argument.

>     }
>   };
>   var aProxy = Proxy(aPrototype, handler);
>   var hasProxyAsProto = Object.create(aProxy);
> At this point, I expected 
>   hasProxyAsProto.__proto__ === aProxy
> but it it not true.  Moreover, the operation 
>   hasProxyAsProto.__proto__
> calls the Proxy handler get function with name === '__proto__': that makes no sense as hasProxyAsProto is not a Proxy.
> I tried this on Firefox 29 and Chrome 36.  Complete example is here:

I can't speak to the correctness of those implementations but you need to have change for it to even have a chance of working.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the es-discuss mailing list