Question about direct proxies syncing their targets

Tab Atkins Jr. jackalmage at gmail.com
Fri Jan 13 18:09:39 PST 2012


On Fri, Jan 13, 2012 at 5:08 PM, David Bruant <bruant.d at gmail.com> wrote:
> Le 14/01/2012 01:57, Tab Atkins Jr. a écrit :
>> In the direct proxies proposal at
>> <http://wiki.ecmascript.org/doku.php?id=harmony:direct_proxies>,
>> there's the following line:
>>
>> get:
>>  * Invariant checks:
>>     * if property exists on target as a data property, updates the
>> target’s property with the returned value
> There is also the following line in introduction:
> "A proxy ensures that its handler and its target do not contradict each
> other as far as non-configurability and non-extensibility are concerned."
>
>> Consider an xrange object like from Python, which represents a numeric
>> range (with a start, stop, and step) and exposes both an iterator and
>> get traps.
>>
>> Am I correct in assuming that, since the target of an xrange proxy is
>> an empty object, iterating through the xrange or getting specific
>> values from it will *not* fill up the target in an attempt to
>> synchronize it with the returned values from the get trap?
> My understanding is that as long as the iteration and property gets
> don't create or report non-writable and non-configurable properties,
> nothing will be done to the target.

Hmm, I'm not certain whether this answers my question or not.  Let me
provide a more direct example.  Assume the following code:

function xrange(start, stop, step) {
  // do error checking, default args, etc.
  var handler = {
    get: function(target, i) {
      var val = start + i * step;
      return val < stop ? val : undefined;
    },
    iterate: function(target){...}
  }
  return new Proxy({}, handler);
}

var a = new xrange(0, 100, 2);
print( a[5] ); // should print "10"

In the above code, after the print statement, does the proxy's target
have a '5' property set on it, or not?


> It seems that the case you describe would be a good candidate for
> "virtual objects" [1]
>
> [1] http://wiki.ecmascript.org/doku.php?id=harmony:virtual_object_api

Yes, virtual objects are probably a better fit for this, as I'd want
only a few traps to be valid, and the rest to fail with a TypeError.
However, I'm still interested in the answer for proxies.

~TJ


More information about the es-discuss mailing list