Javascript prüfen ob Function Exists

Mit diesem Snippet kann man sicher stellen ob eine Funktion existiert oder nicht. Nützlich um ggf. zu vermeiden, dass man Module doppelt registriert.

Achtung dieser Code sagt nur ob es eine Funktion/ein Objekt gibt, welches ans Window Object gehangen ist. Also globale Funktionen. Objekte/Funktionen die mit Const oder Let erzeugt wurden, werden nicht erkannt. Ebenso wenig werden Funktionen innerhalb von Objekten erkannt, als z.b. “meinObjekt.get_var()”

function function_exists ( function_name_string ){
  const check_types = [ "function", "object" ];
  const type_found  = typeof window[function_name_string];
  const is_function = check_types.includes( type_found ); // Nicht IE11 kompatibel
  return is_function;
}
 
/* Usage: */
function test_1(){ /*....*/  }
const test_2 = function(){ /*...*/ }
let test_3 = 1234;
 
function_exists( 'test_1' ); // => true
function_exists( 'test_2' );// => false (da const-Funktionen nicht am Window-Object hängen
function_exists( 'test_3' ); // => false

Verändert nach folgender Quelle: Stackoverflow Beitrag (1), Stackoverflow Beitrag (2) und MDN » array.includes()

Alternative wie es underscore.js macht Dieser Code ist auch gut, hat jedoch den Nachteil, das obj existieren muss, ansonsten gibt es einen Fehler.

is_function = function( obj ) {
  return !!(obj && obj.constructor && obj.call && obj.apply);
};

Quelle: Stackoverflow Beitrag (3)


Page Tools