Proxies fail comparison operator

Michael Lewis mike at lew42.com
Thu Mar 30 19:44:39 UTC 2017


>
> I don't believe Proxies are designed to give you any encapsulation to a
> user who also has a reference to the target object
>

So the Proxy wasn't designed to proxy real objects that operate with real
code?

`myRealFunction(obj)` <---> `myRealFunction(proxy)`

This could be incredibly useful.  You could log every get/set/method call
on the obj.  And, this *will* work in 99% of use cases.  Just cross your
fingers that your code doesn't use the comparison operator.

you'd have to never provide the reference to the target object in the first
> place.


Yea, that's what I'm doing.  But inside a constructor, you basically have
to create the proxy first thing, call all initialization logic on the proxy
instead of `this`, and return the proxy.  And when you're only proxying if
`log: true` has been set, you have to maybe proxy, but maybe not.  I can
work around it, but I'm not happy about it ;)

ljharb ftw!  (I am delevoper on IRC, the one frequently ranting about the
software revolution)

On Thu, Mar 30, 2017 at 1:53 PM, Jordan Harband <ljharb at gmail.com> wrote:

> I don't believe Proxies are designed to give you any encapsulation to a
> user who also has a reference to the target object - you'd have to never
> provide the reference to the target object in the first place.
>
> On Thu, Mar 30, 2017 at 11:50 AM, Michael Lewis <mike at lew42.com> wrote:
>
>> Hello community,
>>
>> The proxy is almost an identical to the underlying object, but it* fails
>> a comparison check with the underlying object.*
>>
>> This means that if anyone gets a reference to the underlying object
>> before it is proxied, then we have a problem.  For example:
>>
>> var obj = {};
>> var proxy = new Proxy(obj, {});
>> obj == proxy; // false
>>
>> *Isn't the purpose of the proxy to be exchanged with the original**,
>> without any negative side effects?  *Maybe that's not the intended use
>> case, but it's a useful one.  And, besides the comparison, I can't think of
>> any other "negative side effects".
>>
>> It seems like the Proxy could have a *comparison trap*.  The comparison
>> could pass by default, and you could use the trap if you wanted to make
>> `proxy == obj` fail.
>>
>> Also, a slight tangent: it would be awesome if you could *skip debugging
>> proxy traps when stepping through code.  *When you proxy both `get` and
>> `apply` for all objects/methods, you have 10x the work when trying to step
>> through your code.
>>
>> I just subscribed to this list.  Is this an appropriate venue for this
>> type of inquiry?  I appreciate any feedback.
>>
>>
>>
>> Thanks!
>>
>> Michael
>>
>>
>>
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss at mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20170330/e3d27c2a/attachment.html>


More information about the es-discuss mailing list