Ich habe an diesem Problem gearbeitet, da ich eine Funktion wie diese brauchte. Hier ist mein Sandbox-Code, nicht gründlich getestet, kann aber ein Ausgangspunkt für andere sein. Beachten Sie, dass es einen Eval() im Code gibt, da ich nicht herausfinden konnte, wie man diesen Schritt umgehen kann, vielleicht eine Javascript-Eigenart, und das kann nicht anders gemacht werden. Lass mich wissen, ob es einen Weg gibt, Eval() hier los zu werden!
executeFunctionByName = function(functionName)
{
var args = Array.prototype.slice.call(arguments).splice(1);
//debug
console.log('args:', args);
var namespaces = functionName.split(".");
//debug
console.log('namespaces:', namespaces);
var func = namespaces.pop();
//debug
console.log('func:', func);
ns = namespaces.join('.');
//debug
console.log('namespace:', ns);
if(ns == '')
{
ns = 'window';
}
ns = eval(ns);
//debug
console.log('evaled namespace:', ns);
return ns[func].apply(ns, args);
}
core = {
paragraph: {
titlebar: {
user: "ddd",
getUser: function(name)
{
this.user = name;
return this.user;
}
}
}
}
var testf = function()
{
alert('dkdkdkd');
}
var x = executeFunctionByName('core.paragraph.titlebar.getUser', 'Ikon');
executeFunctionByName('testf');
möglich Duplikat von [Wie ein auszuführen JavaScript-Funktion, wenn ich den Namen als String habe] (http://stackoverflow.com/questions/359788/how-to-execute-a-jacascript-function-when-i-have-its-name-asa- String) – olibre