closures vs objects vs object literals vs prototype (v3)

Revision 3 of this benchmark created on


Test runner

Ready to run.

Testing in
TestOps/sec
prototype
var Animal = function(name) {
    this.name = name;
    this.nick = null;
    };

Animal.prototype.speak = function() {
  alert(this.name + ' spoke');
};

Animal.prototype.setNick = function(a) {
  this.nick = a;
};

Animal.prototype.getNick = function() {
  alert(this.nick);
};

var cat = new Animal('garfield');
cat.speak();
cat.setNick('iring');
cat.getNick();

var dog = new Animal('odie');
dog.speak();
dog.setNick('iro');
dog.getNick();

cat.speak();
cat.setNick('iring2');
cat.getNick();
ready
closures
var Animal = function(petName) {
    var nick = null;
    return {
      name: petName,
      speak: function() {
        alert(this.name + ' spoke');
      },
      setNick: function(a) {
        nick = a;
      },
      getNick: function() {
        alert(nick);
      }
    };
    };

var cat = new Animal('garfield');
cat.speak();
cat.setNick('iring');
cat.getNick();

var dog = new Animal('odie');
dog.speak();
dog.setNick('iro');
dog.getNick();

cat.speak();
cat.setNick('iring2');
cat.getNick();
ready
objects
var Animal = function(name) {
    this.name = name;
    var nick = null;

    this.speak = function() {
      alert(this.name + ' spoke');
    };

    this.setNick = function(a) {
      nick = a;
    };

    this.getNick = function() {
      alert(nick);
    };
    };

var cat = new Animal('garfield');
cat.speak();
cat.setNick('iring');
cat.getNick();

var dog = new Animal('odie');
dog.speak();
dog.setNick('iro');
dog.getNick();

cat.speak();
cat.setNick('iring2');
cat.getNick();
ready
object literals
var Animal = {
  name: name,
  nick: null,

  setName: function(petName) {
    this.name = petName;
  },

  speak: function() {
    alert(this.name + ' spoke');
  },

  setNick: function(a) {
    this.nick = a;
  },

  getNick: function() {
    alert(this.nick);
  }
};

var clone = (function() {
  function Clone() {}
  return function(obj) {
    Clone.prototype = obj;
    return new Clone();
  };
}());

var cat = clone(Animal);
cat.setName('garfield');
cat.speak();
cat.setNick('iring');
cat.getNick();

var dog = clone(Animal);
dog.setName('odie');
dog.speak();
dog.setNick('iro');
dog.getNick();

cat.speak();
cat.setNick('iring2');
cat.getNick();
ready

Revisions

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