String to Object Methode ohne eval()
ModMoc
- javascript
1 Matti Mäkitalo3 peterS.0 ModMoc
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
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/)
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.
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
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)
);
};