however, push does invoke [[Put]] but only in non array objects. var a = {}; Object.defineProperty( a, "0", { get : function() { alert('get 0'); return this.zero; }, set : function(v) { alert('set 0 ' + v); this.zero = v; }, enumerable : true, configurable : false }); a.length = 0; a.push = [].push; alert('before push a[0] = ' + a[0]); a.push(44); alert('after push a[0] = ' + a[0]);
On Mon, Oct 24, 2011 at 4:12 PM, Andrea Giammarchi < andrea.giammar...@gmail.com> wrote: > In webkit nightly not even the getter gets invoked. > > On Tue, Oct 18, 2011 at 9:31 PM, felix <feli...@gmail.com> wrote: > >> 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 >> > >
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss