mmofacts.com

OOP JavaScript Sample

gepostet vor 18 Jahre von schokofreak
Guten Tag,
JavaScript kann ja bekanntlicherweise OOP. Allerdings nur in beschränktem umfang, vorallem ist die Umsetzung nicht definiert.
-> Es gibt diverseste kreative, und auch weniger kreativere Ansätze.
Das Problem ist, dass manche Ansätze Namespaces unterstützen, manche Vererbungen, manche sogar überschreiben. Aber eigentlich keiner alles.
Hab mich deshalb daran gesetzt und die neuesten Tutorials zu vereinigen...
Was daraus resultiert ist eine verhältnissmässig brauchbare Umsetzung die alles umfasst. Es gibt sowohl Private wie auch Public Deklarationen - fehlen tut nur noch protected, abstract / Interfaces sowie die unterstützung brauchbarer Konstruktoren (mit Sichtbarkeiten). Davon abgesehen lässt sich 100 % OOP umsetzen.
Sprechende Beispiele siehe unten.
Gruss
Christian

//Namespace Declaration
Application = { }
//class Object
Application.Object = function() {
//private Variables
var appName = '';

//public Variables
this.hint = '';
this.dooo = function() {
//
}
//Constructor
function Constructor() {
appName = 'Applikation';
}
//private Functions
function isValid() {
//
}

//public Functions
this.getAppName = function() {
return appName;
}
//Object creation
Constructor();
}
//class Extension extends Object
Application.Extension = function() {
//inheritance
Application.Object.call(this);
//private Variables
//public Variables
//Constructor
function Constructor() {
alert ('Const E');
}
//required for function extension
var _dooo = this.dooo;
//function overwrite
this.dooo = function() {
//super(); call
_dooo();
//function code
alert('child');
}
//Object creation
Constructor();
}
//Class Extension2 extends Extension
Application.Extension2 = function() {
//inheritance
Application.Extension.call(this);
//Constructor
function Constructor() {
alert ('Const E2');
}
//required for function extension
var _dooo = this.dooo;
//function overwrite
this.dooo = function() {
//super(); call
_dooo();
//function code
alert('child2');
}
Constructor();
}
//Singleton Object
//distinguisable by the new
Application.Facade = new function() {
//
}
//Test Code
var tst = new Application.Extension2('asdf');
tst.dooo();
alert(tst.getAppName());
gepostet vor 18 Jahre von knalli
Schön.. nur eine Sache: Ist das gewollt, dass der Appname im Application::Constructor "Applikation" heißt? Also "k" statt "c"?
gepostet vor 18 Jahre von unverbraucht
Hmm, sehr interessant, danke!
Kannst du schon was zur Performance sagen? Wird das beim Parsen oder JIT-compilen spürbar langsamer, wenn erst die Klassen geparsed und dann die Objekte instanziiert werden?
gepostet vor 18 Jahre von schokofreak
Original von unverbraucht
Hmm, sehr interessant, danke!
Kannst du schon was zur Performance sagen? Wird das beim Parsen oder JIT-compilen spürbar langsamer, wenn erst die Klassen geparsed und dann die Objekte instanziiert werden?

Kann ich dir nicht leider nicht. Meine Beobachtung ist, dass einmal geparstes JavaScript performant ist... relativ. Die frage ist wohl, wie lange es geht bis das ganze sauber geladen usw ist / objekte erstellt wurden.
Allerdings, denke dass man sowas eher nur persistent einsetzt... also wie bei Ajax oder so; einmal laden dann ists für minuten, stunden geladen. Somit dürften die Objekt-Erstellungen nicht mehr so oft vorkommen und es kein grosses Problem sein.
Aber an Performance-Test hätt ich auch interesse!
Original von knalli

Schön.. nur eine Sache: Ist das gewollt, dass der Appname im Application::Constructor "Applikation" heißt? Also "k" statt "c"?
Insofern da das ganze relativ spät am abend geschreiben wollte, lässt sich das einfach erklären
Zudem sollt der Konstruktor des Grundobjektes sich eigentlich auch melden - aber die Alert MSG Box ist verloren gegangen :-) Also, schwam drüber...
gepostet vor 18 Jahre von knalli
Okay
Performancemäßig.. tjoa.. wie misst man das am Besten?
Ich hab damals mal ein bisschen mit OOP experimentiert, als ich Fensterobjekte (im Browser verschiebbar durch script.aculous' Drag'n'Drop) mit Schließen, Minimieren, Koordinaten und Co erstellt habe.. die Anzeige hat den Browser gebremst (10 Fenster gleichzeitig FadeIn geht quasi nicht).. aber ein Malus durch Objekte konnte ich nicht messen. Vllt zu wenig?
gepostet vor 18 Jahre von schokofreak
Komisch, mein ehemaliger Fenster Manager hat 10 fenster problemlos weggesteckt? Objekte testen:
Wenn ich mal zeit und lust hab, implementier ich doch einfach mal ein DAO in OOP JS. Dann zeigt sich schon, wie performatn es ist. Nicht OOP funktioniert das nämlich supper...
Oder gibet weitere möglichkeiten?
gepostet vor 18 Jahre von knalli
Original von schokofreak
Komisch, mein ehemaliger Fenster Manager hat 10 fenster problemlos weggesteckt? Objekte testen:
Wenn ich mal zeit und lust hab, implementier ich doch einfach mal ein DAO in OOP JS. Dann zeigt sich schon, wie performatn es ist. Nicht OOP funktioniert das nämlich supper...
Oder gibet weitere möglichkeiten?

Ich meinte FadeIns.. die sind nämlich gleichzeitig durchaus sehr lastig. :O
Aber mal im Ernst: Wie kann man das ordentlich benchmarken? PHP und Co, is kein Ding.. aber in JS fällt mir dazu keine gute Möglichkeit ein.
Und klar ist auch, das man es mindesten in den großen Drei (wenn nicht sogar Vier) testen muss, wobei wahrscheinlich Opera am schnellsten sein wird.
gepostet vor 18 Jahre von Kampfhoernchen
FF hat hier glaub ich wieder mal Defizite, wenn ich mir die Performance von GMail so anguck.
Ich denke aber, alle Browser sind inzwischen clever genug, das gleiche nachgeladene Javascript nochmal zu parsen, stattdessen wird der vorher erzeugte Bytecode (Binary wirds wohl nicht sein) nochmal verwendet.
gepostet vor 18 Jahre von knalli
Original von Kampfhoernchen
FF hat hier glaub ich wieder mal Defizite, wenn ich mir die Performance von GMail so anguck.
Ich denke aber, alle Browser sind inzwischen clever genug, das gleiche nachgeladene Javascript nochmal zu parsen, stattdessen wird der vorher erzeugte Bytecode (Binary wirds wohl nicht sein) nochmal verwendet.

Naja.. zum Thema GMail: Da ich faul bin, und mich nicht umloggen will, läuft im IE7 mein zweiter GMail-Acc.. der lädt das nicht wirklich wesentlich schneller. Und ich meine auch mich zu erinnern, das Opera da nicht wahnsinnig schneller war.. was genau meinst du also?
Das Firefox allgemein nicht der schnellste ist, ist bekannt.. das ist eben der Preis für seine Spezialitäten
gepostet vor 18 Jahre von schokofreak
beachte bitte, dass es mit IE7 und GMail im Moment auch noch gravierende Probleme gibt - diese aber von Tag zu tag weniger werden....
Also für GMail würd ich die nächsten 1, 2 Monate noch IE6 als Referenzbrowser bezeichnen.
Wenn man zurückdenkt, wie GMail vor 2 Monaten im IE7 lief, da kam einem ja das grausen...
gepostet vor 18 Jahre von knalli
Was funktioniert denn nicht? Ich geh zwar meist nur Spam durch, aber konnte noch kein "oops.. Fehler" finden.
gepostet vor 18 Jahre von schokofreak
Es funzt eigentlidch alles, aber mit grotten schlechter Leistung.
Chat in GMail war mal ganz brutal in IE 7... pro Tastendruck muste man 2 sekunden warten... anderenfalls verlor man alle innerhalb dieser Zeit geschriebenen Zeichen...
Was sich darin äussert, dass du Chattest und nur jedes 10te zeichern durchkommt. Ich vermutte dass GMail entweder grosse Probleme mit dem XmlHttp hatte oder mit dem JavaScript Umfeld generell. Auch wenn es sich nur in Chat so extrem zeigt, das Problem dürfte grundlegend sein / Sonst einfach nicht so stark sichtbar...
Auch wenns vorerst alles geht, Leistungsmessungen würd ich in den nächsten 1, 2 Monaten noch nciht machen.

Auf diese Diskussion antworten