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)

4voto

Dieser einfache jQuery-Code sollte den Zweck erfüllen:

if (jQuery.isFunction(functionName)) {
    functionName();
}

4voto

el Dude Punkte 4485

Ich überprüfe das immer auf diese Weise:

if(!myFunction){return false;}

einfach vor jeden Code setzen, der diese Funktion verwendet

4voto

wombleton Punkte 8198

Ich würde vermuten, dass me wird beim Laden nicht korrekt zugewiesen.

Durch Verschieben des get_ID-Aufrufs in das onclick-Ereignis sollte das kein Problem sein.

Natürlich können Sie wie bereits erwähnt weitere Fallen aufstellen:

function js_to_as( str) {
  var me = get_ID('jsExample');
  if (me && me.onChange) {
    me.onChange(str);
  }
}

4voto

Itay Moav -Malimovka Punkte 50743

Ohne Bedingungen

me.onChange=function(){};

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

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

4voto

3limin4t0r Punkte 16157

Ich würde die Verwendung vorschlagen:

function hasMethod(subject, methodName) {
  return subject != null && typeof subject[methodName] == "function";
}

Die erste Prüfung subject != null filtert ungültige Werte heraus ( null y undefined ), die keine Eigenschaften haben. Ohne diese Prüfung subject[methodName] könnte einen Fehler auslösen:

TypeError: (undefined|null) hat keine Eigenschaften

Es reicht nicht aus, nur auf einen Wahrheitswert zu prüfen, da 0 y "" sind beide fälschlich, haben aber Eigenschaften.

Nach der Überprüfung, dass subject nicht nullish ist, können Sie gefahrlos auf die Eigenschaft zugreifen und prüfen, ob sie mit typeof subject[methodName] == "function" .


Wenn Sie dies auf Ihren Code anwenden, können Sie nun Folgendes tun:

if (hasMethod(me, "onChange")) {
  me.onChange(str);
}

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