806 Stimmen

Wie prüft man, ob eine Funktion in JavaScript existiert?

Mein Code lautet

function getID( swfID ){
     if(navigator.appName.indexOf("Microsoft") != -1){
          me = window[swfID];
     }else{
          me = document[swfID];
     }
}

function js_to_as( str ){
     me.onChange(str);
}

Aber manchmal ist mein onChange wird nicht geladen. Firebug-Fehler mit

me.onChange ist keine Funktion

Ich möchte die Leistung schonend abbauen, da dies nicht die wichtigste Funktion in meinem Programm ist. typeof führt zu demselben Fehler.

Irgendwelche Vorschläge, wie man sicherstellen kann, dass sie existiert und dann nur onChange ?

(Keine der folgenden Methoden außer try catch one funktioniert)

6voto

MiffTheFox Punkte 20793
function js_to_as( str ){
     if (me && me.onChange)
         me.onChange(str);
}

5voto

Lucas Bustamante Punkte 13579

Wenn Sie nach einer Funktion suchen, die ein jQuery-Plugin ist, müssen Sie $.fn.myfunction verwenden

if (typeof $.fn.mask === 'function') {
    $('.zip').mask('00000');
}

5voto

PandaWood Punkte 7699

Die Underscore.js-Bibliothek definiert sie in der isFunction-Methode wie folgt (was laut Kommentaren für einige Browser-Bugs sorgen könnte)

typeof obj == 'function' || false

http://underscorejs.org/docs/underscore.html#section-143

5voto

David Douglas Punkte 10157

Ich verwende diese Methode gerne:

function isFunction(functionToCheck) {
  var getType = {};
  return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
}

Verwendung:

if ( isFunction(me.onChange) ) {
    me.onChange(str); // call the function with params
}

4voto

Alexander Fuchs Punkte 137

Ich habe jedoch die akzeptierte Antwort ausprobiert:

console.log(typeof me.onChange);

gibt 'undefiniert' zurück. Mir ist aufgefallen, dass in der Spezifikation ein Ereignis namens "onchange" anstelle von "onChange" angegeben ist (beachten Sie das camelCase).

Die Änderung der ursprünglich akzeptierten Antwort in die folgende hat bei mir funktioniert:

if (typeof me.onchange === "function") { 
  // safe to use the function
}

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