Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Objekt-Property unänderbar machen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Objekt-Property unänderbar machen

    Ich habe vor, JavaScript ab jetzt wirklich objektorientiert zu benutzen.

    Ich stolpere gerade auf eine Sache, die ich irgendwie nicht selbst lösen kann.

    PHP-Code:
    alert(Math.PI); // 3.141592653589793
    Math.PI 5;
    alert(Math.PI); // 3.141592653589793 und nicht 5 
    Ich würde gerne ein Objekt (ich nenne es jetzt einfach mal Eigenes_Math) haben, bei dem die Eigenschaften zwar gelesen, aber nicht geändert werden können. Denn bei mir, kommt das:

    PHP-Code:
    var Eigenes_Math = {
      
    PI 3.141592653589793
    };
    alert(Eigenes_Math.PI); // 3.141592653589793
    Eigenes_Math.PI 5;
    alert(Eigenes_Math.PI); // 5 
    Das ist zwar ein normales Verhalten, aber ich würde gerne wissen, wie man es so erledigt wie beim nativen Math-Objekt ohne irgendwelche Getter oder Setter aufrufen zu müssen.
    Crashkurs zum Thema Rechtschreibung: normalerweise (normaler weise oder normaler weiße), Standard (Standart), eben (ebend)


  • #2
    Hastes mal mit einer Konstanten probiert? Also const statt var zu nutzen?

    Kommentar


    • #3
      Es gibt keine Konstanten in JS, wenn ich mich nicht irre.
      "Mein Name ist Lohse, ich kaufe hier ein."

      Kommentar


      • #4
        Doch gibt es
        Variables and constant in JavaScript
        sigpic

        Kommentar


        • #5
          SELFHTML: JavaScript / Sprachelemente / Reservierte Wörter
          Da steht ab JS 1.5 gäbe es Konstanten, ich kenn mich da aber nicht so genau aus ...

          Kommentar


          • #6
            Die Browserunterstützung ist aber durchwachsen ...

            Firefox und Chrome setzen das um (wobei sie beim Versuch, eine Konstante zu überschreiben, keinen Fehler melden, nur den Wert beibehalten);
            Opera und Safari lassen das Überschreiben des Wertes zu (behandeln damit als const offenbar wie var);
            und der IE meldet einen Syntaxfehler, wenn man das Schlüsselwort const an der Stelle verwendet.

            Kommentar


            • #7
              Was defacto heißt, es gibt keine Konstanten
              "Mein Name ist Lohse, ich kaufe hier ein."

              Kommentar


              • #8
                dann wirst du wohl mit Gettern arbeiten müssen (obwohl ich da jetzt nicht weiß, inwiefern der IE das unterstützt)

                Kommentar


                • #9
                  Ist zwar fast 4 Jahre alt, aber ich habe heute gesehen, dass es Object.freeze() gibt, falls jemand das braucht.
                  Crashkurs zum Thema Rechtschreibung: normalerweise (normaler weise oder normaler weiße), Standard (Standart), eben (ebend)

                  Kommentar


                  • #10
                    Hab so meine Zweifel, ob du mit freeze immer das gewünschte Resultat erreichst.
                    Halte den Vorschlag von Dormilich per get und set für den besseren Weg.
                    Ist sozusagen das Pendant zu den magischen Methoden in PHP.
                    Wird aber auch nicht von allen Browsern unterstützt (z.B. < IE9 nicht).

                    Am Rande: Bei dieser Notation dürfte die Fehlerconsole meckern.

                    Zitat von Asterixus Beitrag anzeigen

                    PHP-Code:
                    var Eigenes_Math = {
                      
                    PI 3.141592653589793
                    };
                    alert(Eigenes_Math.PI); // 3.141592653589793
                    Eigenes_Math.PI 5;
                    alert(Eigenes_Math.PI); // 5 
                    LG jspit
                    PHP-Klassen auf github

                    Kommentar


                    • #11
                      Zitat von jspit Beitrag anzeigen
                      Am Rande: Bei dieser Notation dürfte die Fehlerconsole meckern.
                      Ich gehe mal davon aus, dass ich das dann wohl nicht copy pastet hatte. Verzeih mir, wenn ich mich nicht so recht daran erinnern kann

                      Mit Object.freeze() bin ich einverstanden, dass es nicht wirklich dasselbe ist, denn Math.etwas = 5; funktioniert, während man mit freeze sowas nicht machen könnte.

                      War auch nur 'ne Frage nebenbei, denn man könnte sowieso die Werte überschreiben mit Mein_Math = {};
                      Crashkurs zum Thema Rechtschreibung: normalerweise (normaler weise oder normaler weiße), Standard (Standart), eben (ebend)

                      Kommentar


                      • #12
                        So aber nicht:
                        PHP-Code:
                        const Eigenes_Math = {
                          
                        PI :3.141592653589793
                        };

                        Eigenes_Math = {};

                        alert(Eigenes_Math.PI);  //3.141592653589793 
                        Die Eigenschaften können jedoch manipuliert werden.


                        oder mit get
                        PHP-Code:
                        Eigenes_Math = {
                          
                        get PI() {return 3.141592653589793;}
                        };

                        Eigenes_Math.PI 66;

                        alert(Eigenes_Math.PI);  //3.141592653589793 
                        Dies ist für bestimmte Eigenschaften mein klarer Favorit.

                        LG jspit
                        PHP-Klassen auf github

                        Kommentar

                        Lädt...
                        X