molily: public protected and private in javascript

Beitrag lesen

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

Richtig. Dafür führt ES5 Property Descriptors ein.

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.

»Klassen« exakt in JavaScript nachzubauen ist nicht einfach, weil JavaScript nativ keine solchen bietet. Habe ich das irgendwo behauptet? Ich habe den Artikel auch geschrieben, um Pseudoklassen zu problematisieren. Es ist ein Pattern, das in JavaScript nur schlecht als recht mit einem Haufen Overhead umgesetzt werden kann. JavaScript bietet dazu andere Methoden.

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.

In ES3 sind sämtliche Objekte mutable. ES5 ändert das, ohne dass es plötzlich Klassendeklarationen mit Sichtbarkeiten gibt.

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.

Achso, das meinst du mit Mehrfachvererbung. Klar, es kann immer nur einen Prototyp-Verweis geben und mehrere Prototypen müssen somit in einer Kette liegen.
Gegen Mehrfachvererbung haben sich ja selbst viele klassenbasierte Sprachen entschieden. Dafür gibt es dann flexible Alternativen wie Mixins.

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.

Natürlich, JavaScript ist eine schwierige, weil flexible Sprache, die einem erst einmal wenig Halt gibt. Man kann viel machen, aber auch viel falsch machen. Deshalb versuche ich, Leuten die Funktionsweise von JavaScript zu erklären und Pattern zu etablieren. Den Versuch, JavaScript für Java-Programmierer attraktiver zu machen, halte ich jedoch für problematisch.

Ansätze wie CoffeeScript sind vielversprechend, um Konventionen zu etablieren und die JS-Programmierung zu vereinfachen. Trotzdem bleibt es eine sehr mächtige Sprache. Was man in purem JS falsch machen kann, kann man auch in CoffeeScript oder Pseudoklassen falsch machen. CoffeeScript ist selbst für mich als Fortgeschrittenen eine »leaky abstraction«, ich muss oft schauen, was für ein JS-Code generiert wird.

Mathias

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