• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Oop

Status
Für weitere Antworten geschlossen.
D

DerMitSkill

Guest
Grade durch das eine OOP-Thema wieder auf den Geschmack gekommen.... kennt jemand ein gutes OOP-Tutorials... weil so richtig verstehe ich das auch nicht :mrgreen:

Danke
 
Werbung:
Werbung:
der javascript/DOM teil "Anfänger 1" ist doch garnicht so schlecht... weiß garnicht was du hasst :-D ist sogar lustig geschrieben mit den ganzen bemerkungen über MS :-D

oder was ist an dem tutorial deiner meinung nach verkehrt? ^^
 
  • document.testform.onsubmit -> name="" ist für lange missbilligt
  • new Array() -> []
  • Kein PascalCase für Objekte, wie es in JS üblich ist
  • So wie dort beschrieben, macht man kein OOP mehr
  • usw.
 
  • document.testform.onsubmit -> name="" ist für lange missbilligt
  • new Array() -> []
  • Kein PascalCase für Objekte, wie es in JS üblich ist
  • So wie dort beschrieben, macht man kein OOP mehr
als Urheber diese Elaborats muss ich mal ein paar Fragen und Anmerkungen von mir geben

1. document.testform.onsubmit -> name="" ist für lange missbilligt
Imho gilt das für XHTML strict, mit dem ich aber nicht arbeite. Lasse mich gerne eines Besseren belehren.

2. new Array()
??? Was ist damit nicht in Ordnung?

3. Kein PascalCase für Objekte, wie es in JS üblich ist
In JavaScript ist etwas üblich? :grin:
Gut in PHP mache ich das auch, aber in JS vergesse ich es immer wieder, weil es dort keine Klassen im eigentlichen Sinne gibt. Außerdem habe ich ja an anderer Stelle hingewiesen. Und ehrlich gesagt finde ich tagtäglich auf zig "renomierten" Seiten die unterschiedlichsten Schreibweisen. Das sind nur Code-Conventions, an die man sich halten kann, aber nicht muss.

4. So wie dort beschrieben, macht man kein OOP mehr
Imho macht in JS so ziemlich jeder, was er will. Liegt in der Natur dieser Sprache. Ich nehme nur mal das Beispiel mit den Literal-Objekten. Ist in vielen Frameworks Standard, aber ich meide es wie der Teufel das Weihwasser.

Außerdem ist JavaScript vom Browser abhängig und da habe ich beim IE schon die dollsten Sachen erlebt. Da greife ich lieber auf Dinge zurück, von denen ich weiss, dass sie funktionieren.

Bin aber jederzeit für konstruktive Kritik dankbar. Zumal ich das nach der Arbeit in meiner Freizeit mache. Und glaubt mir, da produziert mal Fehler, für die man sich später selber schämt!

Gruß
Peter
 
Werbung:
Also unter Entwicklern denke ich wohl kaum das [] einem new Array(); vorgezogen wird schon allein wegen der lesbarkeit. wenn man schnell ein array machen will ala [1,2,3,4].funktionsaufruf(); isses ja ok aber wenn eine variable definiert wird sollte new Array(); geschrieben werden da weiß der entwickler nähmlich sofort was sache ist :-D
 
Also unter Entwicklern denke ich wohl kaum das [] einem new Array(); vorgezogen wird schon allein wegen der lesbarkeit. wenn man schnell ein array machen will ala [1,2,3,4].funktionsaufruf(); isses ja ok aber wenn eine variable definiert wird sollte new Array(); geschrieben werden da weiß der entwickler nähmlich sofort was sache ist :-D
ich arbeite bei JS immer mit new Array();
???

peter
 
1. Ja seit XHTML 1.0 ist name="" missbilligt. Und eben weil man Scripte möglichst unabhängig vom HTML gestalten sollte, sollte man das gleich lassen. Name="" hat einfach zu viele Probleme.

2. ["foo", "bar"] statt new Array(). Die Literale gab es in frühen Implementationen (in den 90er) nicht, weshalb das weiterhin verbreitet ist. Sie sind kürzer und schneller

3. PascalCase war immer üblich: XMLHttpRequest, Window, Document, NodeList, HTMLInputElement, String, Date usw.

4. this.foo in die Konstruktor-Funktion zu stecken ist zwar für viele Fälle noch angebracht, aber inzwischen steckt man alles in den Prototypen:
Code:
function MyObject (str) {
    this._setFoo(str);
}

MyObject.prototype = {
    alert : function (str) {
        window.alert("Ausgabe: " + str);
    },
    foo : null
};
MyObject.prototype.quadrat = function (n) {
    return n * n;
}
MyObject.prototype._setFoo = function () {

}
// usw.
Es gibt aber durchaus andere Ansätze. Du darfst auch nicht Modul (wie in JQuery) mit Klassen/Objekten verwechseln.
 
Werbung:
https://developer.mozilla.org/en/A_re-introduction_to_JavaScript:
Ich zitiert's mal von Objekt, gilt aber auch für new Array():
There are two basic ways to create an empty object:

var obj = new Object();

And:

var obj = {};

These are semantically equivalent; the second is called object literal syntax, and is more convenient. Object literal syntax was not present in very early versions of the language which is why you see so much code using the old method.
 
1. Ja seit XHTML 1.0 ist name="" missbilligt. Und eben weil man Scripte möglichst unabhängig vom HTML gestalten sollte, sollte man das gleich lassen. Name="" hat einfach zu viele Probleme.
also ich habe noch nie damit Probleme gehabt. Und alte Gewohnheiten wird man bekanntlich schlecht los.
2. ["foo", "bar"] statt new Array(). Die Literale gab es in frühen Implementationen (in den 90er) nicht, weshalb das weiterhin verbreitet ist. Sie sind kürzer und schneller
Wie ich schon sagte, ich halte von Literalen nicht viel. Da find ich new Array() wesentlich übersichtlicher und vor Allem für Anfänger(!) verständlicher. Allerdings ist auch ein Tutorial zu diesem Thema geplant.
3. PascalCase war immer üblich: XMLHttpRequest, Window, Document, NodeList, HTMLInputElement, String, Date usw.
Ich weiss :smile:. Aber sobald ich ein function schreibe, kommt automatisch ein camelCaps, auch bei JS-Objekten.
4. this.foo in die Konstruktor-Funktion zu stecken ist zwar für viele Fälle noch angebracht, aber inzwischen steckt man alles in den Prototypen:
Ich weiss, machen viele. Und bei Arrays knallt es dann bei älterer Programmierung. Daher bin ich beim Prototyping sehr vorsichtig.

Gruß
Peter
 
Zuletzt bearbeitet:
Werbung:
2. Dann kennen die Anfänger die Literale nicht und machen so ihren Code unübersichtlicher und langsamer.

4. Mit Prototypen gibt es keine Probleme im IE. IE hat Probleme mit der DOM-Implementation und nur wenige Bugs in JScript, z.B. den
length-Bug bei Arrays.

*edit*
mein_array = new Object ();
mein_array = Array ();
Würde ich da unbedingt rausnehmen.
 
2. Dann kennen die Anfänger die Literale nicht und machen so ihren Code unübersichtlicher und langsamer.
Wie ich schon sagte, dazu folgt irgendwann mal ein Tutorial.
4. Mit Prototypen gibt es keine Probleme im IE. IE hat Probleme mit der DOM-Implementation und nur wenige Bugs in JScript, z.B. den length-Bug bei Arrays.
Ich meinte das grundsätzliche Problem beim Prototyping. Also z.B. for ... in. Siehe auch hier: Peter Kropff - Tutorials - OOP/DOM-Scripting JavaScript - Anfängertutorial 2 - Einführung

Gruß
Peter
 
Werbung:
Da ist for...in auch nicht angebracht. For...in braucht man nur in extrem wenigen Fällen, da es langsam ist. Ich kann mich nicht einmal erinnern, wann ich es das letzte mal brauchte.

Hier ein in_array, welches das native indexOf (Firefox. Opera, Safari) beachtet:
Code:
if (typeof Array.prototype.indexOf == "undefined") {
    Array.prototype.indexOf = function (val) {
        for (var i = 0, len = this.length, ele; i < len; i++) {
            ele = this[i];
            if (ele === val) {
                return i;
            }
        }
        return -1;
    }
}
Du brauchst in deinem Fall hasOwnProperty().
 
@crash
du scheints in punkto javascript tatsächlich um Einiges weiter zu sein als ich. Hast du irgendeine Empfehlung zu einem vernünftigen(!) Buch oder Online-Beispiel, wo ausschließlich auf die neuen Möglichkeiten eingegangen wird? 90% von dem, was ich so finde (Bücher/Internet) ist eh ziemlicher Müll, genau wie beim Thema CSS.

Gruß
Peter
 
Werbung:
developer.mozilla.org, planet.mozilla.org, planet.webkit.org und dev.opera.com lesen. Sonst gibt's noch hunderte Webseiten für ein konkretes Probleme, aber Devmo (MDC) ist die beste Quelle.

Sonst kann ich nur empfehlen im IRC rumzuhängen.
 
Hab mich in Sachen OOP bisschen schlauer gemacht, glaube jetzt geht das soweit. Nur: Wann ist OOP sinnvoll? Und wann nicht? Nennt doch bitte mal ein paar Beispiele bei was man OOP verwendet...

Danke
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben