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.
- Zeichenkette am "." teilen.
- 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:]
»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:]