Question about direct proxies syncing their targets

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

On Fri, Jan 13, 2012 at 5:08 PM, David Bruant <bruant.d at> wrote:
> Le 14/01/2012 01:57, Tab Atkins Jr. a écrit :
>> In the direct proxies proposal at
>> <>,
>> 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]

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.


More information about the es-discuss mailing list