/* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/licenses/publicdomain/ */ var obj = {}; var sym = Symbol(); var gets = 0; var sets = []; Object.defineProperty(obj, sym, { get: function () { return ++gets; }, set: function (v) { sets.push(v); } }); // getter for (var i = 1; i < 9; i++) assertEq(obj[sym], i); // setter var expected = []; for (var i = 0; i < 9; i++) { assertEq(obj[sym] = i, i); expected.push(i); } assertDeepEq(sets, expected); // increment operator gets = 0; sets = []; assertEq(obj[sym]++, 1); assertDeepEq(sets, [2]); // assignment gets = 0; sets = []; assertEq(obj[sym] *= 12, 12); assertDeepEq(sets, [12]); if (typeof reportCompare === "function") reportCompare(0, 0);