On Oct 18, 2011, at 12:31 PM, felix wrote:

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

It's supposed to.

> 
> 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:

Yes, that is what it says and it is intentional.

> 
> 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
> [email protected]
> https://mail.mozilla.org/listinfo/es-discuss
> 

_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to