Rolf b: Alternative zu eval() für arithmetische Berechnungen

Beitrag lesen

problematische Seite

Nach dieser Argumentation muss man this immer vermeiden, weil call und apply ein "fremdes" this injizieren können. Was OOP in Javascript ziemlich umständlich macht.

Ein fremdes this injiziert man mMn nur in Funktionen, die darauf ausgelegt sind, per this einen Kontext vorgegeben zu bekommen (Eventhandler in jQuery zum Beispiel). Objektmethoden sind darauf typischerweise nicht ausgelegt. Wenn man es doch tut, ist es halt GIGO[1].

Es bleibt trotzdem schlechter Stil, wenn die Methoden eines Objekts wissen, in welcher Variablen das Objekt gespeichert ist. Eine Lösung ohne this, die etwas taugt, müsste das Module-Pattern verwenden:

var opMap = (function() {
   var ops = {
       add(a,b) { return { symbol:"+", erwartet:a*b}; },
       sub(a,b) { return {...}; },
       mul(a,b) { { return {...}; },
       div(a,b) { { return {...}; }
   };

   return {
      add(a,b) { return ops.add(a,b); },
      sub(a,b) { return ops.sub(a,b); },
      mul(a,b) { return ops.mul(a,b); },
      div(a,b) { return ops.div(a,b); },
      any(a,b) { /* einen Key aus ops.keys() auswählen und ops[key](a,b) aufrufen */ }
   };
})();

Das ist dann so etwas wie Selbstverteidigung gegen bösartige this-Injizierer. Aber wenn ich Krieg der Kerne spielen will, besorge ich mir doch lieber eine MARS Umgebung. Aus jeder Klasse ein Modul zu machen kann arg in Boilerplate-Arbeit ausarten.

Rolf


  1. Garbage In - Garbage Out ↩︎

0 52

Alternative zu eval() für arithmetische Berechnungen

Matthias Scharwies
  • javascript
  1. 0
    Gunnar Bittersmann
    1. 1
      Rolf b
      1. 1
        Felix Riesterer
        1. 1
          Gunnar Bittersmann
      2. 0
        Matthias Scharwies
        1. 2
          Rolf b
          • javascript
          • programmiertechnik
          1. 0
            Matthias Scharwies
            1. 0
              Rolf b
              1. 0
                Camping_RIDER
                • humor
                • menschelei
          2. 1
            1unitedpower
            1. 0
              Rolf b
              1. 0
                1unitedpower
                1. 0
                  Rolf b
                  1. 0
                    1unitedpower
        2. 0
          JürgenB
          1. 1
            Christian Kruse
            1. 0
              JürgenB
              1. 0
                Christian Kruse
  2. 0
    Tabellenkalk
    1. 0
      Gunnar Bittersmann
  3. 0
    pl
    1. 0
      Gunnar Bittersmann
    2. 0
      Rolf b
      1. 1
        pl
        • javascript
        • programmiertechnik
        1. 0
          TS
          1. -1
            pl
            1. 0
              TS
              1. 0
                Tabellenkalk
                1. 0
                  TS
              2. 0
                pl
                1. 0
                  TS
                  1. -2
                    pl
                    • javascript
                    • programmiertechnik
                    • zu diesem forum
                    1. 0
                      Gunnar Bittersmann
                      • zu diesem forum
  4. 1
    Matthias Apsel
    1. 0
      Matthias Scharwies
      1. 2
        JürgenB
      2. 0
        Rolf b
  5. 0
    TS
    • javascript
    • programmplanung
    1. 0

      Mathe-Quiz - Aufgabenstellung zusammengefasst

      Matthias Scharwies
      1. 0

        Mathe-Quiz - aufgabenstellung zusammengefasst

        Matthias Apsel
        1. 0
          dedlfix
          1. 0
            Matthias Apsel
          2. 0

            Mathe-Quiz - für welche Schüler?

            Matthias Scharwies
      2. 0

        Mathe-Quiz 0.3 (läuft)

        Matthias Scharwies
        1. 0
          TS
          1. 0
            Gunnar Bittersmann
            1. 0
              Tabellenkalk
              1. 0
                JürgenB
                1. 0
                  Gunnar Bittersmann
                2. 0
                  TS
        2. 0
          Tabellenkalk
          • javascript
          • programmplanung
          • rechnen