1267 Stimmen

Wie führe ich eine JavaScript-Funktion aus, wenn ich ihren Namen als String habe?

Ich habe den Namen einer Funktion in JavaScript als String. Wie wandle ich diesen in einen Funktionszeiger um, damit ich ihn später aufrufen kann?

Je nach den Umständen kann es erforderlich sein, der Methode auch verschiedene Argumente zu übergeben.

Einige der Funktionen können die folgende Form haben namespace.namespace.function(args[...]) .

2voto

nomæd Punkte 381

Es gibt eine sehr ähnliche Sache in meinem Code. Ich habe eine Server-generierte Zeichenfolge, die einen Funktionsnamen enthält, die ich als Callback für eine 3rd-Party-Bibliothek übergeben müssen. Also habe ich einen Code, der die Zeichenfolge nimmt und gibt einen "Zeiger" auf die Funktion, oder null, wenn es nicht gefunden wird.

Meine Lösung war sehr ähnlich zu " Jason Buntings sehr hilfreiche Funktion " * obwohl es nicht automatisch ausgeführt wird und der Kontext immer auf dem Fenster liegt. Dies kann jedoch leicht geändert werden.

Ich hoffe, dass dies für jemanden hilfreich sein wird.

/**
 * Converts a string containing a function or object method name to a function pointer.
 * @param  string   func
 * @return function
 */
function getFuncFromString(func) {
    // if already a function, return
    if (typeof func === 'function') return func;

    // if string, try to find function or method of object (of "obj.func" format)
    if (typeof func === 'string') {
        if (!func.length) return null;
        var target = window;
        var func = func.split('.');
        while (func.length) {
            var ns = func.shift();
            if (typeof target[ns] === 'undefined') return null;
            target = target[ns];
        }
        if (typeof target === 'function') return target;
    }

    // return null if could not parse
    return null;
}

2voto

Cilan Punkte 11743

Um die Antwort von Jason Bunting zu ergänzen, wenn Sie nodejs oder etwas anderes verwenden (und dies funktioniert auch in dom js), könnten Sie verwenden this 代わりに window (und denken Sie daran: eval ist böse :

this['fun'+'ctionName']();

1voto

crazycrv Punkte 2315

Am einfachsten ist es, wenn Sie auf das Element

window.ClientSideValidations.forms.location_form

ist identisch mit

window.ClientSideValidations.forms['location_form']

1voto

Magnus Smith Punkte 5690

Ich kann nicht umhin, einen weiteren Trick zu erwähnen, der hilft, wenn Sie eine unbekannte Anzahl von Argumenten haben, die auch als Teil der Zeichenkette übergeben werden die den Funktionsnamen enthält. Zum Beispiel:

var annoyingstring = 'call_my_func(123, true, "blah")';

Wenn Ihr Javascript auf einer HTML-Seite läuft, brauchen Sie nur einen unsichtbaren Link; Sie können eine Zeichenkette an die onclick Attribut, und der Aufruf des click Methode.

<a href="#" id="link_secret"><!-- invisible --></a>

$('#link_secret').attr('onclick', annoyingstring);
$('#link_secret').click();

Oder erstellen Sie die <a> Element zur Laufzeit.

1voto

merqlove Punkte 3334

Auch dort gibt es einige sehr hilfreiche Möglichkeiten.

http://devlicio.us/blogs/sergio_pereira/archive/2009/02/09/javascript-5-ways-to-call-a-function.aspx

var arrayMaker = {  
    someProperty: 'some value here',  
    make: function (arg1, arg2) {  
        return [ this, arg1, arg2 ];  
    },
    execute: function_name
};

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X