ModMoc: String to Object Methode ohne eval()

Hallo Gemeinde,

ich suche nach einer Möglichkeit eine "Objekt-Methode als String verpackt" ohne eval() auzuführen.

  
var daten = [  
    { x : 'foo', y : 'boo' }  
];  
  
var obj_string_1 = 'daten.x';  
var obj_string_2 = 'daten.y';  
  
console.log(eval(obj_string_1));  
console.log(eval(obj_string_2));  

Gruß

ModMoc

  1. Hi,

    ich suche nach einer Möglichkeit eine "Objekt-Methode als String verpackt" ohne eval() auzuführen.

    var daten = [
        { x : 'foo', y : 'boo' }
    ];

    var obj_string_1 = 'daten.x';
    var obj_string_2 = 'daten.y';

    console.log(eval(obj_string_1));
    console.log(eval(obj_string_2));

      
    Du könntest ein neues <http://de.selfhtml.org/javascript/objekte/function.htm@title=Funktionsobjekt> erzeugen, aber das ist im Wesentlichen nichts anderes. Nächste Möglichkeit: den String an den Punkten aufsplitten und dann mit der eckigen-Klammerschreibweise dich durch dein Objekt durchhangeln.  
      
    Bis die Tage,  
    Matti
    
    -- 
    [Webapplikationen in C++ entwickeln](http://tntnet.org/)
    
  2. Gruss ModMoc,

    ...
    ich suche nach einer Möglichkeit eine "Objekt-Methode als String verpackt"
    ohne eval() auzuführen.
    ...

    man kann den String schrittweise jeweils am Punktoperator unter Zuhilfenahme
    des []-Operators auflösen. Damit aber klar ist, wohin aufgelöst werden soll,
    bedarf es noch eines Referenzpunktes wie beispielsweise dem globalen Objekt.

    1. Zeichenkette am "." teilen.
    2. generiertes Array mit [reduce] und einer reduce-Anweisung vom Referenzpunkt
         aus durchlaufen.

    Das könnte dann in etwa so aussehen ...

      
    var  
      path = "Math.floor",  
      target = window  
    ;  
    var getReferenceFromPathAndTarget = function (path, target) {  
      
      return (  
        path  
        .split(".")  
        .reduce(function (reference, key) {  
      
          return reference[key];  
      
        }, target)  
      );  
    };  
      
    console.log(getReferenceFromPathAndTarget(path, target) === window.Math.floor);  
    console.log(getReferenceFromPathAndTarget(path, target)(2.999999999999) === 2);  
      
    console.log("Math.ceil".split(".").reduce(function (reference, key) {return reference[key];}, window) === window.Math.ceil);  
    console.log("Math.ceil".split(".").reduce(function (reference, key) {return reference[key];}, window)(2.00000000001) === 3);  
    
    

    Da hinreichend genug gute Bibliotheken existieren, die den Browsern Array-Funktionalität
    aus JavaScript 1.6 bis 1.8 nachreichen, gibt es kaum noch Gründe, sich nicht dieser
    Methoden zu bedienen.

    so long - peterS. - pseliger@gmx.net

    --
    »Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
    Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
    ie:( fl:) br:> va:( ls:& fo:) rl:) n3;} n4:} ss:} de:µ js:} mo:? zu:]
    1. Super, vielen Dank :)

      var
        path = "Math.floor",
        target = window
      ;
      var getReferenceFromPathAndTarget = function (path, target) {

      return (
          path
          .split(".")
          .reduce(function (reference, key) {

      return reference[key];

      }, target)
        );
      };