Property Getter / Setter Techniques (v75)

Revision 75 of this benchmark created by Jon-Carlos Rivera on


Description

Testing various techniques for creating getters / setters in JavaScript.

Preparation HTML

<script>
  var global = this;
  
  (function() {
    global.obj = {
      _prop: 0
    };
  
    global.obj1 = {
      _prop: 0,
      getProp: function() {
        return this._prop;
      },
      setProp: function(value) {
        this._prop = value;
      }
    };
  
    global.obj2 = {
      _prop: 0,
      get prop() {
        return this._prop;
      },
      set prop(value) {
        this._prop = value;
      }
    };
  
  
    global.obj3 = {
      _prop: 0
    }
  
  
    Object.defineProperty(global.obj3, "prop", {
      get: function() {
        return this._prop;
  
      },
      set: function(val) {
        this._prop = val;
      }
    });
  
    global.obj4 = {
      _prop: 0
    }
  
  
    global.obj4.__defineGetter__("prop", function() {
      return this._prop;
    });
  
    global.obj4.__defineSetter__("prop", function(val) {
      this._prop = val;
    });
  })();
var numberArray = [3, 4, 2, 1, 6, 0, 7, 8, 5];
var idx = 0;
var longLivedArray = [];
// Try to optimize this, you dirty engine!
setTimeout(console.log.bind(console), 100000000, longLivedArray);
</script>

Setup

global.obj = {
    prop: 0
    };

Teardown


    longLivedArray.unshift(global.obj1.getProp(), global.obj2.prop,  global.obj3.prop, global.obj4.prop, global.obj.prop);
    
    // Limit data usage
    longLivedArray.length = 32;
  

Test runner

Ready to run.

Testing in
TestOps/sec
Methods
global.obj1.setProp(global.obj1.getProp() + numberArray[numberArray[++idx % 9] % 9]);
ready
get / set
global.obj2.prop = global.obj2.prop + numberArray[numberArray[++idx % 9] % 9];
ready
Object.defineProperty
global.obj3.prop = global.obj3.prop + numberArray[numberArray[++idx % 9] % 9];
ready
__defineGetter__
global.obj4.prop = global.obj4.prop + numberArray[numberArray[++idx % 9] % 9];
ready
Property
global.obj.prop = global.obj.prop + numberArray[numberArray[++idx % 9] % 9];
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.