Revealing proto test

Test the performance of prototype syntax

by arctelix

HTML

<div id="output"></div>

JavaScript

function MyClass1(name){
    this.name = name;
}
MyClass1.prototype = new function () {
    var static = 0;
    
    var getStatic = function () {
        return static;
    }
    this.incStatic = function () {
        static++;
        return getStatic.call(this);
    }
    this.constructor = MyClass1

};
var mc1 = new MyClass1('mc1')

function MyClass2(name){
    this.name = name;
}
MyClass2.prototype = function () {
    var static = 0;
    
    function getStatic () {
        return static;
    }
    function incStatic() {
        static++;
        return getStatic.call(this);
    }
    return {
        incStatic:incStatic,
        constructor:MyClass2
    };
}();
var mc2 = new MyClass2('mc2')



var mc1a = new MyClass1('mc1a')
var mc2a = new MyClass2('mc2a')
var output = document.getElementById('output')
console.log(mc1)
output.innerHTML = (mc1.name+' - incStatic(): '+mc1.incStatic()+'<br>')
output.innerHTML += (mc1a.name+' - incStatic(): '+mc1a.incStatic()+'<br>')
output.innerHTML +=(mc1.name+' - incStatic(): = '+mc1.incStatic()+'<br>')
try{
output.innerHTML +=(mc1a.name+' - getStatic(): '+mc1a.getStatic()+'<br>')
}
catch(e){
e = e.message.replace('<', '').replace('>', '')
output.innerHTML +=(mc1a.name+' - getStatic(): '+e+'<br>')
}
console.log(mc2)
output.innerHTML +=(mc2.name+' - incStatic(): '+mc2.incStatic()+'<br>')
output.innerHTML +=(mc2a.name+' - incStatic(): '+mc2a.incStatic()+'<br>')
output.innerHTML +=(mc2.name+' - incStatic(): '+mc2.incStatic()+'<br>')
try{
output.innerHTML +=(mc2a.name+' - getStatic(): '+mc2a.getStatic()+'<br>')
}
catch(e){
e = e.message.replace('<', '').replace('>', '')
output.innerHTML +=(mc2a.name+' - getStatic(): '+e+'<br>') 
}