Struppi: public protected and private in javascript

Beitrag lesen

Ich sehe da keine Unklarheiten. Ja, man muss aufpassen. Warum man aufpassen muss, erklärt sich aber dadurch, dass der Prototyp gesetzt (überschrieben) wird.

und genau das ist das Problem, du kannst dir in JS nie sicher sein, dass eine prototype Funktion irgendwo überschrieben wird. Und das wirft Unklarheiten auf.

Du kannst dich drehen und wenden wie du willst, das ist in anderen Sprachen nicht so einfach und macht den Umgang mit Objekten in JS ab einer gewissen komplexität schwierig und erfordert eine grosse Disziplin.

Das ist genau das was durch OOP verbessert werden soll, dass du unter keinen Umständen Eigenschaften und Methoden die einer Klasse gehören manipulieren kannst.

Dass diese simple Helferfunktion nicht universell ist, sollte klar sein.

Ich glaube aus genau dem Grund, hat Florian sein FW entwickelt.

Universell ist sein Framework insofern, dass es ein festes Schema vorgibt. Wie gesagt, das leisten andere Implementierungen auch. Y.extend leistet dasselbe wie meine primitive Helferfunktion und kann darüber hinaus noch viel mehr. Durch die Kompaktschreibweise ist das Problem der Reihenfolge aus der Welt.

Leider kriege ich YUI nicht zum laufen. Wenn ich yui.js lokal einbinde und dann z.b. YUI.use('oop') aufrufe, erhalten eine Fehlermeldung, dass YUI.LANG nicht definiert ist. Wenn ich es vom yahoo Server hole, dann kriege ich hier eine Fehlermledung:

YUI.use('oop', function(Y){  
/*  
Bird und Flighted aus deinen Beispielen  
*/  
Y.extend(Bird, Flighted);  
});  

Fehler: Y.extend is not a function

Und warum dann nicht gleich eine super Funktion einbauen, wenn man schon dabei ist?

Ich habe es nicht gemacht, ...

Das war eher eine retorische Frage, um dich auf die Intention von Florian hinzuweisen.

Denn genau dann beginnen die Probleme, denn wenn du an dieser Stelle eine Super Funktion einbauen wolltest fehlt dir diese aber in den prototype Funktionen die später definiert werden.

Du hättest dann auf jeden Fall ein Timinig Problem. Entweder du rufst deine Vererbungsfunktion vorher auf und verpaßt die prototypen danach oder umgekehrt und überschreibst den prototypen.

Und was ist mit Mehrfachvererbung?

Mehrfachvererbung ist auch auf die einfache Weise möglich.

Wie?
Mir ist kein Weg eingefallen, wie sich eine Mehrfachvererbung in JS wirklich umsetzen läßt. Du kannst Objekte erzeugen denen du die prototype Funktionen mehrer Objekte zuweisen kannst, aber instanceof scheitert in dem Fall.

Letztlich hast du aber Florian bestätigt.

Der Ansatz der Sprache kann Fehleranfällig sein, weil sie so dynamisch ist wie kaum eine andere Sprache. Da der prototype leicht überschrieben werden kann.

Ich sehe das nicht als Fehler von JavaScript. Ich bin nicht der Ansicht, dass die grundlegendsten Strukturen bereits »sicher« sein sollten. Das würde die Möglichkeiten arg begrenzen. Bei JavaScript ist es Aufgabe des Programmierers, sich selbst Strukturen zu schaffen, die ihm gewisse Regeln auferlegen.

Volle Zustimmung, aber wie gesagt, OOP definert eigentlich diese Regeln schon und nimmt dem Programmierer diese Aufgaben ab, deshalb ist dieses Konzept für jemanden der zuerst eine klasissche OO Sprache lernt eben fehleranfällig.

Damit will ich aber nicht sagen, dass das ein Fehler von JS ist. Aber das erklärt warum soviele versuchen JS mehr OO Paradigmen überzustülpen. Ob das nun gut oder schlecht ist, ist letztlich eine Frage wie der einzelne es gewohnt ist zu programmieren. Da ich, als "Liebhaber" von Perl, mich mit ähnlichen Problemen auseinandersetzen muss, fällt mir das nicht weiter schwer. Aber ich denke für jemanden der ansonsten viel mit Java arbeitet, sieht die Sache anders aus.

Struppi.

0 112

public protected and private in javascript

Florian Bücklers
  • javascript
  1. 0
    Struppi
    1. 0
      jobo
      1. 0
        jobo
      2. 0
        Florian Bücklers
        1. 1

          Standortbestimmung: Programmierparadigmen, OOP, OOP in JS ...

          peterS.
          1. 0
            Florian Bückkers
            1. 0
              peterS.
              1. 0
                jobo
              2. 0
                Florian Bücklers
              3. 2
                peterS.
                1. 0
                  peterS.
            2. 3
              molily
      3. 0
        molily
        1. 0
          jobo
  2. 1
    Struppi
    1. 0
      Florian Bücklers
  3. 2
    molily
    1. 0

      javascripts oop und ein beispiel

      jobo
      1. 0
        Struppi
    2. 1
      Florian Bücklers
      1. 1
        molily
        1. 0
          Struppi
          1. 1
            molily
            1. 0
              Struppi
              1. 0
                jobo
                1. 0
                  Struppi
              2. 1
                molily
                1. 0
                  Struppi
                  1. 0
                    molily
                    1. 0
                      Struppi
                      1. 0
                        jobo
                        1. 0
                          Struppi
                          1. 0
                            jobo
                          2. 1
                            molily
                            1. 0
                              jobo
                              1. 0
                                jobo
                  2. 1
                    molily
                2. 0
                  Florian Bücklers
                  1. 0
                    jobo
                    1. 0
                      Struppi
                      1. 0
                        jobo
                        1. 0
                          Struppi
                          1. 0
                            jobo
                            1. 0

                              was ist OOP und gibt es eine Implementation in Ecmascript

                              jobo
                            2. 0

                              OOP in Javascript - Object prototypisch erweitern

                              jobo
                            3. 0
                              Struppi
                              1. 0
                                jobo
                                1. 0

                                  protected und Javascript - übergeordnetes (Sicherheits-)Konzept

                                  jobo
                                2. 0
                                  Struppi
                                  1. 0
                                    jobo
                                    1. 0

                                      Diskussionszusammenfassung auf Wikipedia

                                      jobo
                                      1. 0
                                        Struppi
                                        1. 2
                                          molily
                                          1. 0

                                            Diskussionszusammenfassung von molily und node.js

                                            jobo
                                            1. 0
                                              Struppi
                                              1. 0

                                                der Punkt um den es geht ... Privatheitskonzept von Javascript

                                                jobo
                                                1. 0
                                                  Struppi
                                                  1. 0
                                                    jobo
                                                  2. 0

                                                    serverseitiges Javascript - node.js

                                                    jobo
                                                    1. 0
                                                      peterS.
                                                  3. 0

                                                    mitlesender

                                                    peterS.
                                                    • menschelei
                                                    1. 0
                                                      JürgenB
                                            2. 0
                                              molily
                                              1. 0

                                                Diskussionszusammenfassung von molily, node.js und loops

                                                jobo
                      2. 2
                        molily
                        1. 0
                          Struppi
                          1. 0

                            Privatheitskonzept in Javascript

                            jobo
                            1. 0
                              Struppi
                          2. 0
                            molily
                            1. 1
                              molily
                          3. 0
                            jobo
                            1. 0

                              Codereuse und DesignPatterns OOP ohne Vererbung und POO

                              jobo
                              1. 0
                                JürgenB
                                1. 0
                                  jobo
                          4. 0
                            Don P
                            1. 0

                              privat und (pseudo-)"Klassen" - Prototype und Scopevariablen

                              jobo
                              1. 0
                                Don P
                                1. 0
                                  Struppi
                                  1. 0
                                    Don P
                                    1. 0
                                      Struppi
                                      1. 0
                                        Don P
                                        1. 0
                                          Struppi
                                          1. 0

                                            Konstruktor-Closure vs. Prototyp

                                            molily
                                            1. 0
                                              jobo
                                          2. 0
                                            jobo
                                            1. 0
                                              jobo
                                            2. 0
                                              Struppi
                                              1. 0
                                                jobo
                                                1. 0

                                                  Crockfords "module pattern" - unabhängig von YUI(YAHOO)

                                                  jobo
                                                2. 0
                                                  peterS.
                                                  1. 0
                                                    jobo
                                                    1. 0
                                                      Struppi
                                                      1. 0
                                                        jobo
                                                        1. 0
                                                          Struppi
                                                          1. 0

                                                            Performance und "this" im Kontruktor

                                                            jobo
                                                            1. 0
                                                              Struppi
                                                              1. 0
                                                                jobo
                                                                1. 0
                                                                  Struppi
                                                                  1. 0
                                                                    jobo
                                                  2. 0
                                                    Don P
                                                    1. 0

                                                      private mit "revealing module patter" und "speaking code"

                                                      jobo
                                                    2. 0
                                                      Struppi
                                    2. 0
                                      jobo
                                      1. 0
                                        Struppi
                                        1. 0
                                          jobo
                            2. 0
                              Struppi
                  2. 1
                    molily
            2. 0
              jobo
              1. 2
                molily
              2. 1
                molily
                1. 0
                  jobo