literal obj vs function obj (v2)

Revision 2 of this benchmark created by Neal on


Preparation HTML

<script>
  var A = {
    aa: function() {
      var i, j = [];
      var arr = ['Literal', 'Function'];
      for (i = 0; i < arr.length; i++) {
        j[i] = arr[i];
      }
      return j[0];
    }
  };
  var A1 = A;
  var A2 = A1;
  A1.foo = ' Test';
  alert(A1.aa() + A2.foo);
  
  function B() {
    this.bb = function() {
      var i, j = [];
      var arr = ['Literal', 'Function'];
      for (i = 0; i < arr.length; i++) {
        j[i] = arr[i];
      }
      return j[1];
    }
  }
  
  var B1 = new B();
  var B2 = new B();
  B.prototype.foo = ' Test';
  alert(B1.bb() + B2.foo);
  
  function C() {
      var foo;
  
      return {
          bb: function() {
              var i, j = [];
              var arr = ['Literal', 'Function'];
              for (i = 0; i < arr.length; i++) {
                  j[i] = arr[i];
              }
              return j[1];
          },
          setFoo: function(val) {
              foo = val;
          },
          getFoo: function() {
              return foo;
          }
      }
  }
  var C1 = C();
  var C2 = C1;
  C2.setFoo(' Test');
  alert(C1.bb()+ C2.getFoo());
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
Literal
var A = {
  aa: function() {
    var i, j = [];
    var arr = ['Literal', 'Function'];
    for (i = 0; i < arr.length; i++) {
      j[i] = arr[i];
    }
    return j[0];
  }
};
var A1 = A;
var A2 = A1;
A1.foo = ' Test';
alert(A1.aa() + A2.foo);
ready
Function
function B() {
  this.bb = function() {
    var i, j = [];
    var arr = ['Literal', 'Function'];
    for (i = 0; i < arr.length; i++) {
      j[i] = arr[i];
    }
    return j[1];
  }
}

var B1 = new B();
var B2 = new B();
B.prototype.foo = ' Test';
alert(B1.bb() + B2.foo);
ready
Functional OOP
function C() {
    var foo;

    return {
        bb: function() {
            var i, j = [];
            var arr = ['Literal', 'Function'];
            for (i = 0; i < arr.length; i++) {
                j[i] = arr[i];
            }
            return j[1];
        },
        setFoo: function(val) {
            foo = val;
        },
        getFoo: function() {
            return foo;
        }
    }
}
var C1 = C();
var C2 = C1;
C2.setFoo(' Test');
alert(C1.bb()+ C2.getFoo());
ready

Revisions

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