Hei,
Ostatnio wróciłem do zakurzonego projektu w Javascript. Między innymi chciałem się pozbyć pewnego mankamentu. W samym systemie chodzi o tworzenie obiektów dziedziczących prototypowo z pewnego, dostępnego szablonu. Rzecz w tym, że sam szablon powinien wykonywać kilka zadań zaraz po utworzeniu instancji obiektu.
var Foo = (function(){
/*konstruktor klasy*/
super.instantiate(); //Mankament
})
Foo.prototype = new Parent();
Żeby się tego pozbyć musiałem się trochę namęczyć, ale finalnie zrobiłem coś takiego (raczej z ciekawości, czy zadziała):
var Parent = (function(child){
/*konstuktor klasy rodzica*/
child.prototype = this;
return (function(){
var obj = new (child.apply( obj, arguments ));
obj.prototype.instantiate();
return obj;
});
})
Używane jako:
var Foo = (function(){
/*konstruktor klasy*/
})
Foo = new Parent( Foo ); //Tutaj przydałby się jakiś synonim jak: "Foo = new ChildOfParent( Foo );"
Sporo rzeczy pominąłem. Chciałem przedstawić tylko ogólny zamysł i podzielić się moim zaskoczeniem nad faktem, że coś takiego działa.
P.S.: Nie mogłem znaleźć w ECMA 5.1 ani słowa na temat wartości zwracanej przez konstruktor zdefiniowanych typów, więc nie jestem pewien, czy to nie jest zachowanie niestandardowe (Firefox 36.0.4).