można obejść nie pisanie "new" by "this" działało w JS głównie na 2 sposoby:
Kod
function Test(a){
if(this instanceof Test){
// ustaiwamy konstruktor przy tworzeniu instancji obiektu
this.a = a;
} else {
// jeśli ktoś wywoła funkcję bez "new"
return new Test(a);
}
};
Test.prototype = {
alertA: function(){alert(this.a)}
};
Test(33).alertA();
var o = Test(33);
alert(o instanceof Test);
Kod
// DZIEDZICZENIE (no nie zupełnie tak się powinno dziedziczyć

!) TAK COBY BEZ IFÓW I ZAPĘTLENIA
// korzystając nie poprawnie z dziedziczenia w js
function Test(a){
// obejście konstruktora - nie powinno tak się robić...
return new Test2(a);
};
Test.prototype = {
alertA: function(){alert(this.a)}
};
function Test2(a){
//faktyczny konstruktor - przy dziedziczeniu nie do końca tak się powinno robić
this.a = a;
}
Test2.prototype = Test.prototype;
Test(33).alertA();
var o = Test(33);
alert(o instanceof Test);
By w JS poprawnie dziedziczyć (chodzi o nadpisywanie i przesłanianie głównie metod) należy prototype przypisać do anonimowej funkcji i zwrócić instancję w deseń:
Kod
function instanceProto(proto){
var f=function(){};
f.prototype = proto;
return new f;
}
// i dla przykładu potem można poprawniej np.
// Test2.prototype = instanceProto(Test.prototype);
jeśli nie robiliśmy takich dziwnych "zapętleń" to wywołać konstruktora przodka u potomka można w ten sposób, że po prostu w konstruktorze wołamy konstruktora przodka bez new lub korzystamy z odpowiedniej konstrukcji funkcji call bądź apply