Proxy's optional target

Andrea Giammarchi andrea.giammarchi at gmail.com
Mon Jan 14 22:53:28 PST 2013


yep, same as asking for defineProperties with properties definition used as
"class" as unique required argument, it might make sense, but it's ok in
any case as it is


On Mon, Jan 14, 2013 at 10:50 PM, Dmitry Soshnikov <
dmitry.soshnikov at gmail.com> wrote:

>
> On Jan 14, 2013, at 10:40 PM, Brandon Benvie wrote:
>
> The proxy target is important because it specifies some invariants about
> the proxy (typeof, builtin brand, behavior of forwarding for unspecified
> traps, values of internal properties like [[DateValue]], [[NumberValue]],
> etc.).
>
>
> Sure, but the target still exists. I't just created implicitly (as new
> Object()) if not provided.
>
> 1. Explicit target:
>
> var p = new Proxy(handler, {x: 10});
>
> 2. Implicit target:
>
> var p = new Proxy(handler); // which is the same as:
>
> var p = new Proxy(handler, {});
>
> Then only difference from the current API, that the target is the second
> argument to the Proxy constructor which allows to ditch cases like: var p =
> new Proxy({}, handler), where you're forced always pass this empty object.
>
> But, here can be the trade-off, having this target as the first argument,
> because it correlates with the methods from ES5 like var o =
> Object.defineProperties({}, descriptors);.
>
> Dmitry
>
>
>
> On Tue, Jan 15, 2013 at 1:09 AM, Andrea Giammarchi <
> andrea.giammarchi at gmail.com> wrote:
>
>> and `this` is the handler, not the target ...
>>
>> var
>>   handler,
>>   target = {test:123},
>>   proxy = new Proxy(target, handler = {
>>     get: function ($target, key) {
>>       alert($target === target); // true
>>       alert(this === handler);   // true
>>       return $target[key];
>>     }
>>   })
>> ;
>> alert(proxy.test); // 123
>>
>> and no, I don;'t think everyone gonna proxy empty objects but if that's
>> the case you want that because either you are looking for a singleton,
>> otherwise what's the point to have same target per each new handler? Your
>> concern is the othr way round too, isn't it?
>>
>> If you use new Proxy you want a different target, I guess, otherwise you
>> are most likely looking for same handler, different targets, which makes
>> more sense, imho
>>
>> new Proxy({/*fresh new target*/}, sameHandler)
>>
>>
>>
>>
>>
>> On Mon, Jan 14, 2013 at 9:55 PM, Dmitry Soshnikov <
>> dmitry.soshnikov at gmail.com> wrote:
>>
>>>
>>> On Jan 14, 2013, at 9:51 PM, Andrea Giammarchi wrote:
>>>
>>> uhm, you might be slightly behind current specs ... these changed proxy
>>> quite a lot so that first argument is the target, and second argument is
>>> the behavior.
>>>
>>> var myProxy = new Proxy(target, handler);
>>>
>>>
>>> Oh, I'm aware about current pre-spec MDC article and API. And this is
>>> why saying. In most use-cases you probably wanna proxy an empty object, and
>>> this is why in current API you end up in code like this:
>>>
>>> var p = new Proxy({}, handler);
>>>
>>> And I'm saying about these "{}" always as the first argument.
>>>
>>> Dmitry
>>>
>>> at least that's how Firefox implemented it right now :D
>>>
>>> var
>>>   target = {test:123},
>>>   proxy = new Proxy(target, {
>>>     get: function ($target, key) {
>>>       alert($target === target); // true
>>>       return $target[key];
>>>     }
>>>   })
>>> ;
>>> alert(proxy.test); // 123
>>>
>>>
>>> On Mon, Jan 14, 2013 at 9:32 PM, Dmitry Soshnikov <
>>> dmitry.soshnikov at gmail.com> wrote:
>>>
>>>> Hello,
>>>>
>>>> Don't know whether it was mentioned/asked before (sorry if so), but
>>>> just a note: probably it makes more sense making the target argument as
>>>> optional and the second one in the Proxy constructor's API.
>>>>
>>>> Proxy(handler[, target]):
>>>>
>>>> 1. If target is undefined, let the target be new Object();
>>>> ...
>>>>
>>>> In this case we'll cover (probably the most used) use-case of
>>>> direct-proxies:
>>>>
>>>> var p = new Proxy({
>>>>   get: function(target, name, value) {
>>>>     ...
>>>>   }
>>>> });
>>>>
>>>> Thanks,
>>>> Dmitry
>>>> _______________________________________________
>>>> es-discuss mailing list
>>>> es-discuss at mozilla.org
>>>> https://mail.mozilla.org/listinfo/es-discuss
>>>>
>>>
>>>
>>>
>>
>> _______________________________________________
>> 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/20130114/893c0928/attachment.html>


More information about the es-discuss mailing list