archives

« Bugzilla Issues Index

#245 — Coverage: need check that setter defined for Array.prototype[0] gets called on [].push(...)


<Thanks>David Bruant</Thanks>

Le 18/10/2011 21:37, Allen Wirfs-Brock a écrit :
> 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.