peterS.: String to Object Methode ohne eval()

Beitrag lesen

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:]