[Harmony Proxies] Proposal: Property fixing

Sean Eagan seaneagan1 at gmail.com
Wed May 4 09:04:51 PDT 2011


What:

Honor attempts to make individual proxy properties non-configurable.

Why:

For consistency since attempts to make *all* of a proxy's properties
non-configurable are honored via the "fix" trap.

Example:

var x = Proxy.create({
  defineProperty: function() {},
  getPropertyDescriptor: function() {
    return {
      value: "whatever I want",
      writable: true,
      configurable: true,
      enumerable: false
    };
  }
});
Object.defineProperty(x, "foo", {value: "bar", configurable: false,
writable: false, enumerable: true};

/* ... */

// logs "whatever I want", not "bar"
console.log(x.foo);
// non-writable, but doesn't throw
object.foo = "baz";
// non-configurable, but doesn't throw
Object.defineProperty(x, "foo", {configurable: true});

How:

Assume a "defineProperty" trap invocation due to
|Object.defineProperty(proxy, name, pd)| where |!pd.configurable|.  If
return value is...

  true - Henceforth bypass |proxy|'s handler for any traps with a
property name parameter when the property name would be |name|
  false - throw TypeError similarly to "fix" trap

Update the "fix" trap semantics such that when its return value is not
undefined but rather a property descriptor map, behavior is similar to
|Object.defineProperties| in that improperly redefining any properties
will cause a TypeError to be thrown.

Notes:

Can check |Object.getOwnPropertyDescriptor(proxy, name).configurable|
to determine if a given proxy property is fixed since it will always
be false in this case.


Thanks,
Sean Eagan


More information about the es-discuss mailing list