JavaScript Object Oriented Libraries Benchmark with getters and setters

JavaScript performance comparison

Revision 158 of this test case created by Aadit M Shah

Preparation code

<script src="http://dl.dropbox.com/u/7677927/oop-benchmark/lib/jsface.js">
</script>
<script src="http://dl.dropbox.com/u/7677927/oop-benchmark/lib/my.class.js">
</script>
<script src="http://dl.dropbox.com/u/7677927/oop-benchmark/lib/jrclass.js">
</script>
<script src="http://dl.dropbox.com/u/7677927/oop-benchmark/lib/klass.js">
</script>
<script src="http://dl.dropbox.com/u/7677927/oop-benchmark/lib/classy.js">
</script>
<script src="http://dl.dropbox.com/u/7677927/oop-benchmark/lib/ptclass.js">
</script>
<script>
(function (global, factory) {
    if (typeof define === "function" && define.amd) define(factory);
    else if (typeof module === "object") module.exports = factory();
    else global.augment = factory();
}(this, function () {

    "use strict";

    var Factory = function () {};
    var slice = Array.prototype.slice;

    return function (base, body) {
        var uber = Factory.prototype = typeof base === "function" ? base.prototype : base;
        var prototype = new Factory;
        body.apply(prototype, slice.call(arguments, 2).concat(uber));
        if (!prototype.hasOwnProperty("constructor")) return prototype;
        var constructor = prototype.constructor;
        constructor.prototype = prototype;
        return constructor;
    }
}));
</script>
<script src="http://cdn.sencha.com/ext-4.1.1a-gpl/builds/ext-foundation.js">
</script>
<script src="https://rawgithub.com/torworx/ovy/master/ovy.js">
</script>
<script src="http://indigounited.com/dejavu/dejavu.js">
</script>
<script>
  var __hasProp = {}.hasOwnProperty,
    __extends = function(child, parent) {
    for (var key in parent) {
      if (__hasProp.call(parent, key)) child[key] = parent[key];
    }

    function ctor() {
      this.constructor = child;
    }
    ctor.prototype = parent.prototype;
    child.prototype = new ctor();
    child.__super__ = parent.prototype;
    return child;
    };

var JSFacePerson = jsface.Class({
  constructor: function(name) {
    this.name = name;
  },
  set country( value ){
    this._country = value;
  },
  set city( value ){
    this._city = value;
  },
  set street( value ){
    this._street = value;
  },
  setAddress: function(country, city, street) {
    this.country = country;
    this.city = city;
    this.street = street;
  }
});

var JSFaceFrenchGuy = jsface.Class(JSFacePerson, {
  constructor: function(name) {
    JSFaceFrenchGuy.$super.call(this, name);
  },
  setAddress: function(city, street) {
    JSFaceFrenchGuy.$superp.setAddress.call(this, 'France', city, street);
  }
});

var JSFaceParisLover = jsface.Class(JSFaceFrenchGuy, {
  constructor: function(name) {
    JSFaceParisLover.$super.call(this, name);
  },
  setAddress: function(street) {
    JSFaceParisLover.$superp.setAddress.call(this, 'Paris', street);
  }
});

var MyPerson = my.Class({
  constructor: function(name) {
    this.name = name;
  },
  set country( value ){
    this._country = value;
  },
  set city( value ){
    this._city = value;
  },
  set street( value ){
    this._street = value;
  },
  setAddress: function(country, city, street) {
    this.country = country;
    this.city = city;
    this.street = street;
  }
});

var MyFrenchGuy = my.Class(MyPerson, {
  constructor: function(name) {
    MyFrenchGuy.Super.call(this, name);
  },
  setAddress: function(city, street) {
    MyFrenchGuy.Super.prototype.setAddress.call(this, 'France', city, street);
  }
});

var MyParisLover = my.Class(MyFrenchGuy, {
  constructor: function(name) {
    MyParisLover.Super.call(this, name);
  },
  setAddress: function(street) {
    MyParisLover.Super.prototype.setAddress.call(this, 'Paris', street);
  }
});

var JRPerson = JRClass.extend({
  init: function(name) {
    this.name = name;
  },
  set country( value ){
    this._country = value;
  },
  set city( value ){
    this._city = value;
  },
  set street( value ){
    this._street = value;
  },
  setAddress: function(country, city, street) {
    this.country = country;
    this.city = city;
    this.street = street;
  },
  sayHello: function() {
    console.log('I am ' + this.name + '. My address is ' + this.country + ', ' + this.city + ', ' + this.street + '.');
  }
});

var JRFrenchGuy = JRPerson.extend({
  init: function(name) {
    this._super(name);
  },
  setAddress: function(city, street) {
    this._super('France', city, street);
  }
});

var JRParisLover = JRFrenchGuy.extend({
  init: function(name) {
    this._super(name);
  },
  setAddress: function(street) {
    this._super('Paris', street);
  }
});

var EnderPerson = klass(function(name) {
  this.name = name;
}).methods({
  set country( value ){
    this._country = value;
  },
  set city( value ){
    this._city = value;
  },
  set street( value ){
    this._street = value;
  },
  setAddress: function(country, city, street) {
    this.country = country;
    this.city = city;
    this.street = street;
  }
});

var EnderFrenchGuy = EnderPerson.extend(function(name) {}).methods({
  setAddress: function(city, street) {
    this.supr('France', city, street);
  }
});

var EnderParisLover = EnderFrenchGuy.extend(function(name) {}).methods({
  setAddress: function(street) {
    this.supr('Paris', street);
  }
});

var ClassyPerson = Classy.$extend({
  __init__: function(name) {
    this.name = name;
  },
  set country( value ){
    this._country = value;
  },
  set city( value ){
    this._city = value;
  },
  set street( value ){
    this._street = value;
  },
  setAddress: function(country, city, street) {
    this.country = country;
    this.city = city;
    this.street = street;
  }
});

var ClassyFrenchGuy = ClassyPerson.$extend({
  __init__: function(name) {
    this.$super(name);
  },
  setAddress: function(city, street) {
    this.$super('France', city, street);
  }
});

var ClassyParisLover = ClassyFrenchGuy.$extend({
  __init__: function(name) {
    this.$super(name);
  },
  setAddress: function(street) {
    this.$super('Paris', street);
  }
});

var PTClassPerson = PTClass.create({
  initialize: function(name) {
    this.name = name;
  },
  set country( value ){
    this._country = value;
  },
  set city( value ){
    this._city = value;
  },
  set street( value ){
    this._street = value;
  },
  setAddress: function(country, city, street) {
    this.country = country;
    this.city = city;
    this.street = street;
  }
});

var PTClassFrenchGuy = PTClass.create(PTClassPerson, {
  initialize: function($super, name) {
    $super(name);
  },
  setAddress: function($super, city, street) {
    $super('France', city, street);
  }
});

var PTClassParisLover = PTClass.create(PTClassFrenchGuy, {
  initialize: function($super, name) {
    $super(name);
  },
  setAddress: function($super, street) {
    $super('Paris', street);
  }
});

var CoffeePerson = (function() {

  function CoffeePerson(name) {
    this.name = name;
  }

  CoffeePerson.prototype.setAddress = function(country, city, street) {
    this.country = country;
    this.city = city;
    this.street = street;
  };

  return CoffeePerson;

})();

var CoffeeFrenchGuy = (function(_super) {

  __extends(CoffeeFrenchGuy, _super);

  function CoffeeFrenchGuy(name) {
    CoffeeFrenchGuy.__super__.constructor.call(this, name);
  }

  CoffeeFrenchGuy.prototype.setAddress = function(city, street) {
    return CoffeeFrenchGuy.__super__.setAddress.call(this, "France", city, street);
  };

  return CoffeeFrenchGuy;

})(CoffeePerson);

var CoffeeParisLover = (function(_super) {

  __extends(CoffeeParisLover, _super);

  function CoffeeParisLover(name) {
    CoffeeParisLover.__super__.constructor.call(this, name);
  }

  CoffeeParisLover.prototype.setAddress = function(street) {
    return CoffeeParisLover.__super__.setAddress.call(this, "Paris", street);
  };

  return CoffeeParisLover;

})(CoffeeFrenchGuy);

Ext.define('ExtPerson', {
  constructor: function(name) {
    this.name = name;
  },
  set country( value ){
    this._country = value;
  },
  set city( value ){
    this._city = value;
  },
  set street( value ){
    this._street = value;
  },
  setAddress: function(country, city, street) {
    this.country = country;
    this.city = city;
    this.street = street;
  }
});

Ext.define('ExtChinaGuy', {
  extend: 'ExtPerson',
  constructor: function() {
    this.callParent(arguments);
  },
  setAddress: function(city, street) {
    this.callParent(['China', city, street]);
  }
});

Ext.define('ExtBeiJingLover', {
  extend: 'ExtChinaGuy',
  constructor: function(name) {
    this.callParent(arguments);
  },
  setAddress: function(street) {
    this.callParent(['BeiJing', street]);
  }
});

var dejavuClassPerson = dejavu.Class.declare({
  initialize: function(name) {
    this.name = name;
  },
  set country( value ){
    this._country = value;
  },
  set city( value ){
    this._city = value;
  },
  set street( value ){
    this._street = value;
  },
  setAddress: function(country, city, street) {
    this.country = country;
    this.city = city;
    this.street = street;
  }
});

var dejavuClassFrenchGuy = dejavu.Class.declare({
  $extends: dejavuClassPerson,
  setAddress: function(city, street) {
    this.$super('France', city, street);
  }
});

var dejavuClassParisLover = dejavu.Class.declare({
  $extends: dejavuClassFrenchGuy,
  setAddress: function(street) {
    this.$super('Paris', street);
  }
});

var dejavuClassPerson2 = dejavu.Class.declare({
  initialize: function(name){
    this.name = name;
  },
  set country( value ){
    this._country = value;
  },
  set city( value ){
    this._city = value;
  },
  set street( value ){
    this._street = value;
  },
  setAddress: function(country, city, street) {
    this.country = country;
    this.city = city;
    this.street = street;
  }
}, true);

var dejavuClassFrenchGuy2 = dejavu.Class.declare({
  $extends: dejavuClassPerson2,
  initialize: function (name) {
    dejavuClassPerson2.call(this, name);
  },
  setAddress: function(city, street) {
    dejavuClassPerson2.prototype.setAddress.call(this, 'France', city, street);
  }
}, true);

var dejavuClassParisLover2 = dejavu.Class.declare({
  $extends: dejavuClassFrenchGuy2,
  initialize: function (name) {
    dejavuClassFrenchGuy2.call(this, name);
  },
  setAddress: function(street) {
    dejavuClassFrenchGuy2.prototype.setAddress.call(this, 'Paris', street);
  }
}, true);

var dejavuClassPerson3 = dejavu.Class.declare(function () {
  return {
        initialize: function(name){
            this.name = name;
        },
        setAddress: function(country, city, street) {
            this.country = country;
            this.city = city;
            this.street = street;
        }
    };
}, true);

var dejavuClassFrenchGuy3 = dejavuClassPerson3.extend(function ($super) {
   return {
       setAddress: function(city, street) {
           $super.setAddress.call(this, 'France', city, street);
       }
   };
}, true);

var dejavuClassParisLover3 = dejavuClassFrenchGuy3.extend(function ($super) {
    return {
        setAddress: function(street) {
            $super.setAddress.call(this, 'Paris', street);
        }
    };
}, true);

var OvyPerson = Ovy.define({
  constructor: function(name) {
    this.name = name;
  },
  set country( value ){
    this._country = value;
  },
  set city( value ){
    this._city = value;
  },
  set street( value ){
    this._street = value;
  },
  setAddress: function(country, city, street) {
    this.country = country;
    this.city = city;
    this.street = street;
  }
});

var OvyChinaGuy = Ovy.define({
  extend: OvyPerson,
  constructor: function(name) {
    OvyChinaGuy.$superclass.call(this, name)
  },
  setAddress: function(city, street) {
    OvyChinaGuy.$super.setAddress.call(this, 'China', city, street);
  }
});

var OvyBeijingLover = Ovy.define({
  extend: OvyChinaGuy,
  constructor: function(name) {
    OvyBeijingLover.$superclass.call(this, name);
  },
  setAddress: function(street) {
    OvyBeijingLover.$super.setAddress.call(this, 'Beijing', street);
  }
});


var AugmentPerson = augment(Object, function() {
  this.constructor = function (name) {
    this.name = name;
  };

  this.setAddress = function(country, city, street) {
    this.country = country;
    this.city = city;
    this.street = street;
  };
});

var AugmentFrenchGuy = augment(AugmentPerson, function(base) {
  var setAddress = base.setAddress;

  this.constructor = function (name) {
    AugmentPerson.call(this, name);
  };

  this.setAddress = function(city, street) {
    setAddress.call(this, "France", city, street);
  };
});

var AugmentParisLover = augment(AugmentFrenchGuy, function(base) {
  var setAddress = base.setAddress;

  this.constructor = function (name) {
    AugmentFrenchGuy.call(this, name);
  };

  this.setAddress = function(street) {
    setAddress.call(this, "Paris", street);
  };
});

var NativePerson = function(name){
  this.name = name;
};
NativePerson.prototype.setAddress = function(country, city, street) {
  this.country = country;
  this.city = city;
  this.street = street;
};

var NativeFrenchGuy = function(name) {
  NativePerson.call(this, name);
};
NativeFrenchGuy.prototype = Object.create(NativePerson.prototype);
NativeFrenchGuy.prototype.constructor = NativeFrenchGuy;
NativeFrenchGuy.prototype.setAddress = function(city, street) {
  NativePerson.prototype.setAddress.call(this, 'France', city, street);
};

var NativeParisLover = function(name) {
  NativeFrenchGuy.call(this, name);
};
NativeParisLover.prototype = Object.create(NativeFrenchGuy.prototype);
NativeParisLover.prototype.constructor = NativeParisLover;
NativeParisLover.prototype.setAddress = function(street) {
  NativeFrenchGuy.prototype.setAddress.call(this, 'Paris', street);
};
</script>
    

Preparation code output

<script src="http://dl.dropbox.com/u/7677927/oop-benchmark/lib/my.class.js"> </script> <script src="http://dl.dropbox.com/u/7677927/oop-benchmark/lib/jrclass.js"> </script> <script src="http://dl.dropbox.com/u/7677927/oop-benchmark/lib/klass.js"> </script> <script src="http://dl.dropbox.com/u/7677927/oop-benchmark/lib/classy.js"> </script> <script src="http://dl.dropbox.com/u/7677927/oop-benchmark/lib/ptclass.js"> </script> <script> (function (global, factory) { if (typeof define === "function" && define.amd) define(factory); else if (typeof module === "object") module.exports = factory(); else global.augment = factory(); }(this, function () { "use strict"; var Factory = function () {}; var slice = Array.prototype.slice; return function (base, body) { var uber = Factory.prototype = typeof base === "function" ? base.prototype : base; var prototype = new Factory; body.apply(prototype, slice.call(arguments, 2).concat(uber)); if (!prototype.hasOwnProperty("constructor")) return prototype; var constructor = prototype.constructor; constructor.prototype = prototype; return constructor; } })); </script> <script src="http://cdn.sencha.com/ext-4.1.1a-gpl/builds/ext-foundation.js"> </script> <script src="https://rawgithub.com/torworx/ovy/master/ovy.js"> </script> <script src="http://indigounited.com/dejavu/dejavu.js"> </script> <script> var __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; var JSFacePerson = jsface.Class({ constructor: function(name) { this.name = name; }, set country( value ){ this._country = value; }, set city( value ){ this._city = value; }, set street( value ){ this._street = value; }, setAddress: function(country, city, street) { this.country = country; this.city = city; this.street = street; } }); var JSFaceFrenchGuy = jsface.Class(JSFacePerson, { constructor: function(name) { JSFaceFrenchGuy.$super.call(this, name); }, setAddress: function(city, street) { JSFaceFrenchGuy.$superp.setAddress.call(this, 'France', city, street); } }); var JSFaceParisLover = jsface.Class(JSFaceFrenchGuy, { constructor: function(name) { JSFaceParisLover.$super.call(this, name); }, setAddress: function(street) { JSFaceParisLover.$superp.setAddress.call(this, 'Paris', street); } }); var MyPerson = my.Class({ constructor: function(name) { this.name = name; }, set country( value ){ this._country = value; }, set city( value ){ this._city = value; }, set street( value ){ this._street = value; }, setAddress: function(country, city, street) { this.country = country; this.city = city; this.street = street; } }); var MyFrenchGuy = my.Class(MyPerson, { constructor: function(name) { MyFrenchGuy.Super.call(this, name); }, setAddress: function(city, street) { MyFrenchGuy.Super.prototype.setAddress.call(this, 'France', city, street); } }); var MyParisLover = my.Class(MyFrenchGuy, { constructor: function(name) { MyParisLover.Super.call(this, name); }, setAddress: function(street) { MyParisLover.Super.prototype.setAddress.call(this, 'Paris', street); } }); var JRPerson = JRClass.extend({ init: function(name) { this.name = name; }, set country( value ){ this._country = value; }, set city( value ){ this._city = value; }, set street( value ){ this._street = value; }, setAddress: function(country, city, street) { this.country = country; this.city = city; this.street = street; }, sayHello: function() { console.log('I am ' + this.name + '. My address is ' + this.country + ', ' + this.city + ', ' + this.street + '.'); } }); var JRFrenchGuy = JRPerson.extend({ init: function(name) { this._super(name); }, setAddress: function(city, street) { this._super('France', city, street); } }); var JRParisLover = JRFrenchGuy.extend({ init: function(name) { this._super(name); }, setAddress: function(street) { this._super('Paris', street); } }); var EnderPerson = klass(function(name) { this.name = name; }).methods({ set country( value ){ this._country = value; }, set city( value ){ this._city = value; }, set street( value ){ this._street = value; }, setAddress: function(country, city, street) { this.country = country; this.city = city; this.street = street; } }); var EnderFrenchGuy = EnderPerson.extend(function(name) {}).methods({ setAddress: function(city, street) { this.supr('France', city, street); } }); var EnderParisLover = EnderFrenchGuy.extend(function(name) {}).methods({ setAddress: function(street) { this.supr('Paris', street); } }); var ClassyPerson = Classy.$extend({ __init__: function(name) { this.name = name; }, set country( value ){ this._country = value; }, set city( value ){ this._city = value; }, set street( value ){ this._street = value; }, setAddress: function(country, city, street) { this.country = country; this.city = city; this.street = street; } }); var ClassyFrenchGuy = ClassyPerson.$extend({ __init__: function(name) { this.$super(name); }, setAddress: function(city, street) { this.$super('France', city, street); } }); var ClassyParisLover = ClassyFrenchGuy.$extend({ __init__: function(name) { this.$super(name); }, setAddress: function(street) { this.$super('Paris', street); } }); var PTClassPerson = PTClass.create({ initialize: function(name) { this.name = name; }, set country( value ){ this._country = value; }, set city( value ){ this._city = value; }, set street( value ){ this._street = value; }, setAddress: function(country, city, street) { this.country = country; this.city = city; this.street = street; } }); var PTClassFrenchGuy = PTClass.create(PTClassPerson, { initialize: function($super, name) { $super(name); }, setAddress: function($super, city, street) { $super('France', city, street); } }); var PTClassParisLover = PTClass.create(PTClassFrenchGuy, { initialize: function($super, name) { $super(name); }, setAddress: function($super, street) { $super('Paris', street); } }); var CoffeePerson = (function() { function CoffeePerson(name) { this.name = name; } CoffeePerson.prototype.setAddress = function(country, city, street) { this.country = country; this.city = city; this.street = street; }; return CoffeePerson; })(); var CoffeeFrenchGuy = (function(_super) { __extends(CoffeeFrenchGuy, _super); function CoffeeFrenchGuy(name) { CoffeeFrenchGuy.__super__.constructor.call(this, name); } CoffeeFrenchGuy.prototype.setAddress = function(city, street) { return CoffeeFrenchGuy.__super__.setAddress.call(this, "France", city, street); }; return CoffeeFrenchGuy; })(CoffeePerson); var CoffeeParisLover = (function(_super) { __extends(CoffeeParisLover, _super); function CoffeeParisLover(name) { CoffeeParisLover.__super__.constructor.call(this, name); } CoffeeParisLover.prototype.setAddress = function(street) { return CoffeeParisLover.__super__.setAddress.call(this, "Paris", street); }; return CoffeeParisLover; })(CoffeeFrenchGuy); Ext.define('ExtPerson', { constructor: function(name) { this.name = name; }, set country( value ){ this._country = value; }, set city( value ){ this._city = value; }, set street( value ){ this._street = value; }, setAddress: function(country, city, street) { this.country = country; this.city = city; this.street = street; } }); Ext.define('ExtChinaGuy', { extend: 'ExtPerson', constructor: function() { this.callParent(arguments); }, setAddress: function(city, street) { this.callParent(['China', city, street]); } }); Ext.define('ExtBeiJingLover', { extend: 'ExtChinaGuy', constructor: function(name) { this.callParent(arguments); }, setAddress: function(street) { this.callParent(['BeiJing', street]); } }); var dejavuClassPerson = dejavu.Class.declare({ initialize: function(name) { this.name = name; }, set country( value ){ this._country = value; }, set city( value ){ this._city = value; }, set street( value ){ this._street = value; }, setAddress: function(country, city, street) { this.country = country; this.city = city; this.street = street; } }); var dejavuClassFrenchGuy = dejavu.Class.declare({ $extends: dejavuClassPerson, setAddress: function(city, street) { this.$super('France', city, street); } }); var dejavuClassParisLover = dejavu.Class.declare({ $extends: dejavuClassFrenchGuy, setAddress: function(street) { this.$super('Paris', street); } }); var dejavuClassPerson2 = dejavu.Class.declare({ initialize: function(name){ this.name = name; }, set country( value ){ this._country = value; }, set city( value ){ this._city = value; }, set street( value ){ this._street = value; }, setAddress: function(country, city, street) { this.country = country; this.city = city; this.street = street; } }, true); var dejavuClassFrenchGuy2 = dejavu.Class.declare({ $extends: dejavuClassPerson2, initialize: function (name) { dejavuClassPerson2.call(this, name); }, setAddress: function(city, street) { dejavuClassPerson2.prototype.setAddress.call(this, 'France', city, street); } }, true); var dejavuClassParisLover2 = dejavu.Class.declare({ $extends: dejavuClassFrenchGuy2, initialize: function (name) { dejavuClassFrenchGuy2.call(this, name); }, setAddress: function(street) { dejavuClassFrenchGuy2.prototype.setAddress.call(this, 'Paris', street); } }, true); var dejavuClassPerson3 = dejavu.Class.declare(function () { return { initialize: function(name){ this.name = name; }, setAddress: function(country, city, street) { this.country = country; this.city = city; this.street = street; } }; }, true); var dejavuClassFrenchGuy3 = dejavuClassPerson3.extend(function ($super) { return { setAddress: function(city, street) { $super.setAddress.call(this, 'France', city, street); } }; }, true); var dejavuClassParisLover3 = dejavuClassFrenchGuy3.extend(function ($super) { return { setAddress: function(street) { $super.setAddress.call(this, 'Paris', street); } }; }, true); var OvyPerson = Ovy.define({ constructor: function(name) { this.name = name; }, set country( value ){ this._country = value; }, set city( value ){ this._city = value; }, set street( value ){ this._street = value; }, setAddress: function(country, city, street) { this.country = country; this.city = city; this.street = street; } }); var OvyChinaGuy = Ovy.define({ extend: OvyPerson, constructor: function(name) { OvyChinaGuy.$superclass.call(this, name) }, setAddress: function(city, street) { OvyChinaGuy.$super.setAddress.call(this, 'China', city, street); } }); var OvyBeijingLover = Ovy.define({ extend: OvyChinaGuy, constructor: function(name) { OvyBeijingLover.$superclass.call(this, name); }, setAddress: function(street) { OvyBeijingLover.$super.setAddress.call(this, 'Beijing', street); } }); var AugmentPerson = augment(Object, function() { this.constructor = function (name) { this.name = name; }; this.setAddress = function(country, city, street) { this.country = country; this.city = city; this.street = street; }; }); var AugmentFrenchGuy = augment(AugmentPerson, function(base) { var setAddress = base.setAddress; this.constructor = function (name) { AugmentPerson.call(this, name); }; this.setAddress = function(city, street) { setAddress.call(this, "France", city, street); }; }); var AugmentParisLover = augment(AugmentFrenchGuy, function(base) { var setAddress = base.setAddress; this.constructor = function (name) { AugmentFrenchGuy.call(this, name); }; this.setAddress = function(street) { setAddress.call(this, "Paris", street); }; }); var NativePerson = function(name){ this.name = name; }; NativePerson.prototype.setAddress = function(country, city, street) { this.country = country; this.city = city; this.street = street; }; var NativeFrenchGuy = function(name) { NativePerson.call(this, name); }; NativeFrenchGuy.prototype = Object.create(NativePerson.prototype); NativeFrenchGuy.prototype.constructor = NativeFrenchGuy; NativeFrenchGuy.prototype.setAddress = function(city, street) { NativePerson.prototype.setAddress.call(this, 'France', city, street); }; var NativeParisLover = function(name) { NativeFrenchGuy.call(this, name); }; NativeParisLover.prototype = Object.create(NativeFrenchGuy.prototype); NativeParisLover.prototype.constructor = NativeParisLover; NativeParisLover.prototype.setAddress = function(street) { NativeFrenchGuy.prototype.setAddress.call(this, 'Paris', street); }; </script>

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in CCBot 2.0.0 / Other 0.0.0
Test Ops/sec
JSFace
var p3 = new JSFaceParisLover("Mary");
p3.setAddress("CH");
pending…
my.Class
var p6 = new MyParisLover("Mary");
p6.setAddress("CH");
pending…
John Resig Class
var p9 = new JRParisLover("Mary");
p9.setAddress("CH");
pending…
Klass
var p12 = new EnderParisLover("Mary");
p12.setAddress("CH");
pending…
Classy
var p15 = new ClassyParisLover("Mary");
p15.setAddress("CH");
pending…
PTClass
var p18 = new PTClassParisLover("Mary");
p18.setAddress("CH");
pending…
CoffeeScript Classes
var p21 = new CoffeeParisLover("Mary");
p21.setAddress("CH");
pending…
augment
var p24 = new AugmentParisLover("Mary");
p24.setAddress("CH");
pending…
Ext JS
var p27 = new ExtBeiJingLover("Mary");
p27.setAddress("CH");
pending…
Ovy
var p30 = new OvyBeijingLover("Mary");
p30.setAddress("CH");
pending…
dejavu
var p33 = new dejavuClassParisLover("Mary");
p33.setAddress("CH");
pending…
dejavu optimized
var p36 = new dejavuClassParisLover2("Mary");
p36.setAddress("CH");
pending…
dejavu optimized closures
var p39 = new dejavuClassParisLover3("Mary");
p39.setAddress("CH");
pending…
Native
var p42 = new NativeParisLover("Mary");
p42.setAddress("CH");
pending…

Compare results of other browsers

Revisions

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

0 Comments