Preparation Code Preparation HTML (this will be inserted in the <body>
of a valid HTML5 document in standards mode) (useful when testing DOM operations or including libraries) <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/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/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/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/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/classy.js" > </script >
<script src ="http://dl.dropbox.com/u/7677927/oop-benchmark/lib/ptclass.js" </script >
<script src ="http://dl.dropbox.com/u/7677927/oop-benchmark/lib/ptclass.js" </script >
<script >
var inherit=function ( ){"use strict" ;var i,j,k,a="object" ,b="prototype" ,c="constructor" ,d=function ( ){},e=arguments ,f=e[0 ],g=1 ==e.length ?d :e[1 ],h=typeof f===a;return typeof g===a?(i=d,i[b]=g):(i=g,i[b]=h?f :new f),j=new i (i[b]),k=!j.hasOwnProperty (c),(k&&f===j[c]||k&&h)&&(j[c]=d),j[c][b]=j,j[c]};
var inherit0 = function ( ) {
'use strict' ;
var len = arguments .length ,
parent = (len > 1 ) ? arguments [0 ] : function ( ){},
body = arguments [len - 1 ];
body.prototype = Object .create (parent.prototype );
var prototype = new body (body.prototype );
prototype.constructor .prototype = prototype;
return prototype.constructor ;
};
</script >
Setup JS
Teardown JS
Test cases
Test #1 Title *
Async
Code * var JSFacePerson = jsface.Class ({
constructor : function (name ){
this .name = name;
},
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 p1 = new JSFacePerson ("John" );
p1.setAddress ("US" , "MT" , "CH" );
var p2 = new JSFaceFrenchGuy ("Leo" );
p2.setAddress ("MT" , "CH" );
var p3 = new JSFaceParisLover ("Mary" );
p3.setAddress ("CH" );
Test #2 Title *
Async
Code * var MyPerson = my.Class ({
constructor : function (name ){
this .name = name;
},
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 p4 = new MyPerson ("John" );
p4.setAddress ("US" , "MT" , "CH" );
var p5 = new MyFrenchGuy ("Leo" );
p5.setAddress ("MT" , "CH" );
var p6 = new MyParisLover ("Mary" );
p6.setAddress ("CH" );
Title *
Async
Code * var JRPerson = JRClass.extend ({
init : function (name ){
this .name = name;
},
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 p7 = new JRPerson ("John" );
p7.setAddress ("US" , "MT" , "CH" );
var p8 = new JRFrenchGuy ("Leo" );
p8.setAddress ("MT" , "CH" );
var p9 = new JRParisLover ("Mary" );
p9.setAddress ("CH" );
Title *
Async
Code * var EnderPerson = klass (function (name ) {
this .name = name;
})
.methods ({
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 p10 = new EnderPerson ("John" );
p10.setAddress ("US" , "MT" , "CH" );
var p11 = new EnderFrenchGuy ("Leo" );
p11.setAddress ("MT" , "CH" );
var p12 = new EnderParisLover ("Mary" );
p12.setAddress ("CH" );
Title *
Async
Code * var ClassyPerson = Classy .$extend({
__init__ : function (name ){
this .name = name;
},
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 p13 = new ClassyPerson ("John" );
p13.setAddress ("US" , "MT" , "CH" );
var p14 = new ClassyFrenchGuy ("Leo" );
p14.setAddress ("MT" , "CH" );
var p15 = new ClassyParisLover ("Mary" );
p15.setAddress ("CH" );
Title *
Async
Code * var PTClassPerson = PTClass.create ({
initialize : function (name ){
this .name = name;
},
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 p16 = new PTClassPerson ("John" );
p16.setAddress ("US" , "MT" , "CH" );
var p17 = new PTClassFrenchGuy ("Leo" );
p17.setAddress ("MT" , "CH" );
var p18 = new PTClassParisLover ("Mary" );
p18.setAddress ("CH" );
Title *
Async
Code * var InheritPerson = inherit (function ( ) {
this .constructor = function (name ) {
this .name = name;
};
this .setAddress = function (country, city, street ) {
this .country = country;
this .city = city;
this .street = street;
};
});
var InheritFrenchGuy = inherit (InheritPerson , function (base ) {
this .constructor = function (name ) {
base.constructor .call (this , name);
};
this .setAddress = function (city, street ) {
base.setAddress .call (this , "France" , city, street);
};
});
var InheritParisLover = inherit (InheritFrenchGuy , function (base ) {
this .constructor = function (name ) {
base.constructor .call (this , name);
};
this .setAddress = function (street ) {
base.setAddress .call (this , "Paris" , street);
return this ;
};
});
var p19 = new InheritPerson ("John" );
p19.setAddress ("US" , "MT" , "CH" );
var p20 = new InheritFrenchGuy ("Leo" );
p20.setAddress ("MT" , "CH" );
var p21 = new InheritParisLover ("Mary" );
p21.setAddress ("CH" );
Title *
Async
Code * var InheritPerson 0 = inherit0 (function ( ) {
this .constructor = function (name ) {
this .name = name;
};
this .setAddress = function (country, city, street ) {
this .country = country;
this .city = city;
this .street = street;
};
});
var InheritFrenchGuy 0 = inherit0 (InheritPerson 0, function (base ) {
this .constructor = function (name ) {
base.constructor .call (this , name);
};
this .setAddress = function (city, street ) {
base.setAddress .call (this , "France" , city, street);
};
});
var InheritParisLover 0 = inherit0 (InheritFrenchGuy 0, function (base ) {
this .constructor = function (name ) {
base.constructor .call (this , name);
};
this .setAddress = function (street ) {
base.setAddress .call (this , "Paris" , street);
return this ;
};
});
var t1 = new InheritPerson 0("John" );
t1.setAddress ("US" , "MT" , "CH" );
var t2 = new InheritFrenchGuy 0("Leo" );
t2.setAddress ("MT" , "CH" );
var t3 = new InheritParisLover 0("Mary" );
t3.setAddress ("CH" );