Test case details

Preparation Code

<script> Object.defineProperties(Object.prototype, { _create: { value: function(state) { var This = this.constructor; if (This.prototype !== this && this.hasOwnProperty('constructor')) This.prototype = this; return new This(state); }, writable: true, configurable: true }, _create2: { value: function(state) { var obj = state; obj.__proto__ = this; return obj; }, writable: true, configurable: true }, constructor: { value: function(state) { for (var name in state) this[name] = state[name] }, writable: true, configurable: true } }); object$ = Object.prototype; Object.create2 = function(proto){ var obj = {}; obj.__proto__ = proto; return obj; } </script>
function MyClass(x, y) { this.x = x; this.y = y; } var MyProtoClass = { init: (function(x, y) { this.x = x; this.y = y; return this; }), x: 0, y: 0 }; function doSomething(obj) { var x = obj.x + obj.y, y = obj.x * obj.y, z = obj.x - obj.y; return x * y * z; } var x = 0 | (Math.random() * 10000), y = 0 | (Math.random() * 10000);

Test cases

Test #1

var obj = new MyClass(x, y); doSomething(obj);

Test #2

var obj = Object.create(MyProtoClass).init(x, y); doSomething(obj);

Test #3

//See if it might be faster by not calling the init function. var obj = Object.create(MyProtoClass); obj.x = x; obj.y = y; doSomething(obj);

Test #4

var obj = object$._create({ x: x, y: y }); doSomething(obj);

Test #5

var obj = object$._create2({ x: x, y: y }); doSomething(obj);

Test #6

var obj = Object.create2(MyProtoClass); obj.x = x; obj.y = y; doSomething(obj);

Test #7

var obj = Object.create3(MyProtoClass); obj.x = x; obj.y = y; doSomething(obj);