iterator-set-and-redefine.js (804B)
1 function mapped() { 2 var Iterator = {}; 3 4 // First overwrite the iterator. 5 arguments[Symbol.iterator] = Iterator; 6 7 // And then redefine a property attribute. 8 Object.defineProperty(arguments, Symbol.iterator, { 9 writable: false 10 }); 11 12 // Make sure redefining an attribute doesn't reset the iterator value. 13 assertEq(arguments[Symbol.iterator], Iterator); 14 } 15 mapped(); 16 17 function unmapped() { 18 "use strict"; 19 20 var Iterator = {}; 21 22 // First overwrite the iterator. 23 arguments[Symbol.iterator] = Iterator; 24 25 // And then redefine a property attribute. 26 Object.defineProperty(arguments, Symbol.iterator, { 27 writable: false 28 }); 29 30 // Make sure redefining an attribute doesn't reset the iterator value. 31 assertEq(arguments[Symbol.iterator], Iterator); 32 } 33 unmapped();