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)

15voto

Mat Carlson Punkte 503

トライ typeof -- Suche nach 'undefined' zu sagen, dass sie nicht existiert, 'function' für eine Funktion. JSFiddle für diesen Code

function thisishere() {
    return false;
}
alert("thisishere() is a " + typeof thisishere);
alert("thisisnthere() is " + typeof thisisnthere);

Oder als "wenn":

if (typeof thisishere === 'function') {
    // function exists
}

Oder mit einem Rückgabewert, in einer einzigen Zeile:

var exists = (typeof thisishere === 'function') ? "Value if true" : "Value if false";
var exists = (typeof thisishere === 'function') // Returns true or false

14voto

Samir Alajmovic Punkte 3102

Ich habe diesen Vorschlag nicht gesehen: me.onChange && me.onChange(str);

Wenn me.onChange undefiniert ist (was es ist, wenn es nicht initiiert wurde), wird der letzte Teil nicht ausgeführt. Wenn me.onChange eine Funktion ist, wird me.onChange(str) ausgeführt.

Sie können sogar noch weiter gehen und tun:

me && me.onChange && me.onChange(str);

für den Fall, dass ich auch asynchron bin.

12voto

Tu4n3r Punkte 411

Für mich ist das der einfachste Weg:

function func_exists(fname)
{
  return (typeof window[fname] === 'function');
}

10voto

Setzen Sie ein doppeltes Ausrufezeichen, d.h. !!, vor den Namen der Funktion, die Sie überprüfen möchten. Wenn sie existiert, wird sie true zurückgeben.

function abc(){
}
!!window.abc; // return true
!!window.abcd; // return false

9voto

Mohammad Lotfi Punkte 303
function function_exists(function_name)
{
    return eval('typeof ' + function_name) === 'function';
}
alert(function_exists('test'));
alert(function_exists('function_exists'));

OR

function function_exists(func_name) {
  //  discuss at: http://phpjs.org/functions/function_exists/
  // original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // improved by: Steve Clay
  // improved by: Legaev Andrey
  // improved by: Brett Zamir (http://brett-zamir.me)
  //   example 1: function_exists('isFinite');
  //   returns 1: true

  if (typeof func_name === 'string') {
    func_name = this.window[func_name];
  }
  return typeof func_name === '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