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