Test case details

Preparation Code

<script>   var acc = 0,       funct = {         get: function() { return this._x; },         set: function(value) { this._x = value; }       },       obj = { _x: 0 };   //obj.__defineGetter__('a', funct['get']);   //obj.__defineSetter__('a', funct['set']);   Object.defineProperty(obj, "b", {     configurable: true,     get: funct['get'],     set: funct['set']   });   obj.prototype = {     get c() { return this._x; },     set c(value) { this._x = value; }   };   obj.getX = function() { return this._x; };   obj.setX = function(value) { this._x = value; }; </script>

Test cases

Test #1

for (var i = 0; i < 1000; i++) {  obj.a = i;  acc += obj.a; }

Test #2

for (var i = 0; i < 1000; i++) {  obj.b = i;  acc += obj.b; }

Test #3

for (var i = 0; i < 1000; i++) {  obj._x = i;  acc += obj._x; }

Test #4

for (var i = 0; i < 1000; i++) {  obj.c = i;  acc += obj.c; }

Test #5

for (var i = 0; i < 1000; i++) {  obj.setX(i);  acc += obj._x; }

Test #6

for (var i = 0; i < 1000; i++) {  funct.set.call(obj, i);  acc += funct.get.call(obj); }

Test #7

for (var i = 0; i < 1000; i++) {  obj.setX(i);  acc += obj.getX(i); }