If I define a setter for Array.prototype[0], does [].push invoke that setter?

Test code:

<!doctype html><html><body>
<script>
  Object.defineProperty(
    Array.prototype, 0,
    { get : function() { alert('get 0'); return this.zero; },
      set : function(v) { alert('set 0 ' + v); this.zero = v; },
      enumerable : true,
      configurable : false });
  var a = [];
  alert('before push a[0] = ' + a[0]);
  a.push(44);
  alert('after push a[0] = ' + a[0]);
</script>
</body></html>

On all the browsers I've tried so far, the setter doesn't get invoked.

However, it looks to me like the ES5.1 spec says the setter should get invoked:

15.4.4.7 says push() invokes the [[Put]] internal method

8.12.5 says [[Put]] tries to use an inherited property descriptor if
there isn't an own property descriptor.
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to