Prüfen, ob Funtion existiert?
_Robert
- javascript
Hallo,
kann man irgendwie prüfen, ob eine Funktion existiert?
Ich habe bisher damit versucht:
if(windowname_der_funktion){
tue_dies_und_das
}
else{
tue_was_anderes
}
Leider funktioniert das nicht.
Viele Grüße
Robert
kann man irgendwie prüfen, ob eine Funktion existiert?
Ich habe bisher damit versucht:
if(windowname_der_funktion){
so rufst du die Funktion auf. Du suchst:
if(typeof window[name_der_funktion] == 'function'){
Struppi.
kann man irgendwie prüfen, ob eine Funktion existiert?
Ich habe bisher damit versucht:
if(windowname_der_funktion){
tue_dies_und_das
}
else{
tue_was_anderes
}
Objektabfragen und Fallunterscheidungen in JavaScript hilft dir sicher weiter.
Leider funktioniert das nicht.
Das ist keine informative Problembeschreibung? Was für ein Fehler tritt auf?
Das ist keine informative Problembeschreibung? Was für ein Fehler tritt auf?
Oh... sorry. Der Browser bemängelt, dass die Funktion nicht existiert.
Aus diesem Grund funktioniert Struppi's Beispiel mit TypeOf auch nicht.
Objektabfragen und Fallunterscheidungen in JavaScript hilft dir sicher weiter.
Ja, der Link hat geholfen. Danke.
Ich fange die Fehlermeldung jetzt mit try/catch ab und werte sie aus.
Danke an alle für eure Antworten.
Aus diesem Grund funktioniert Struppi's Beispiel mit TypeOf auch nicht.
natürlich funktioniert das. Du musst es nur so anwenden wie ich es dir gezeigt habe.
Struppi.
natürlich funktioniert das. Du musst es nur so anwenden wie ich es dir gezeigt habe.
Hab' ich. Und es hat nicht funktioniert, weil die Funktion nicht existiert hat. JavaScript hat dadurch sofort die Fehlermeldung ausgegeben, dass die Funktion nicht existiert.
natürlich funktioniert das. Du musst es nur so anwenden wie ich es dir gezeigt habe.
Hab' ich. Und es hat nicht funktioniert, weil die Funktion nicht existiert hat. JavaScript hat dadurch sofort die Fehlermeldung ausgegeben, dass die Funktion nicht existiert.
Lüg doch nicht, du hast es 100% nicht so probiert wie ich es dir gezeigt habe.
var funktion_exisistiert_nicht = 'bla';
var funktion_exisistiert = 'test';
if(typeof window[funktion_exisistiert_nicht] != 'function') alert('nein');else alert('doch');
if(typeof window[funktion_exisistiert] != 'function') alert('nein'); else alert('doch');
function test () {}
Struppi.
Lüg doch nicht, du hast es 100% nicht so probiert wie ich es dir gezeigt habe.
Nun mach' aber mal 'n Punkt. Dein Code-Schnipsel war folgender:
if(typeof window[name_der_funktion] == 'function'){
Ich hab den dann wie folgt ergänzt:
if(typeof window[name_der_funktion] == 'function'){alert('okay')}else{alert('me')}
Und das funktioniert definitiv nicht!
var funktion_exisistiert_nicht = 'bla';
var funktion_exisistiert = 'test';
if(typeof window[funktion_exisistiert_nicht] != 'function') alert('nein');else alert('doch');
if(typeof window[funktion_exisistiert] != 'function') alert('nein'); else alert('doch');function test () {}
Aha. Man muss also vorher noch den Namen der Funktion in einer Variablen speichern und mit dieser dann weiterarbeiten. Das wusste ich nicht und konnte es auch nirgends entnehmen. Auf jeden Fall funktioniert es jetzt so.
Nochmals danke an alle für die zahlreichen Antworten.
Nun mach' aber mal 'n Punkt. Dein Code-Schnipsel war folgender:
if(typeof window[name_der_funktion] == 'function'){
Ich hab den dann wie folgt ergänzt:
if(typeof window[name_der_funktion] == 'function'){alert('okay')}else{alert('me')}
Und das funktioniert definitiv nicht!
Definitiv doch. Nur du hast nicht gesagt, dass name_der_funktion kein String ist, dann musst du es so machen:
if(typeof name_der_funktion == 'function'){alert('okay')}else{alert('me')}
Struppi.
Definitiv doch. Nur du hast nicht gesagt, dass name_der_funktion kein String ist, dann musst du es so machen:
ooops - ich meinte natürlich: Keine Variabel
Für mich war klar, dass du eine Variabel hast, in der der Name der Funktion als String gespeichert ist, da ansonsten dein Code keinen Sinn gemacht hätte.
Struppi.
ooops - ich meinte natürlich: Keine Variabel
Für mich war klar, dass du eine Variabel hast, in der der Name der Funktion als String gespeichert ist, da ansonsten dein Code keinen Sinn gemacht hätte.
Oh... ein Missverständnis sozusagen. Ich wäre nie auf die Idee gekommen, den Namen der Funktion vorher in einer Variable zu speichern.
Und das mein Code keinen Sinn ergibt, habe ich nicht vorausgesehen. Da ich mit window[name_der_funktion]()
die Funktion aufrufe, lag es für mich nahe, es mal mit if(window[name_der_funktion]()){...
zu versuchen.
Naja, wieder was gelernt. :-)
Oh... ein Missverständnis sozusagen.
absolut :-)
Und das mein Code keinen Sinn ergibt, habe ich nicht vorausgesehen. Da ich mit
window[name_der_funktion]()
die Funktion aufrufe, ...
Warum das? Das musst du nur machen, entweder wenn name_der_funktion eine Variabel ist (wie von mir angenommen), oder wenn es ein String in der Form "name_der_funktion" ist, ansonsten ruft man Funktion üblicherweise so auf: name_der_funktion()
Struppi.
if(typeof window[name_der_funktion] == 'function'){
Ich hab den dann wie folgt ergänzt:
if(typeof window[name_der_funktion] == 'function'){alert('okay')}else{alert('me')}
Und das funktioniert definitiv nicht!
Zur Unterscheidung:
Zugriff auf ein Unterobjekt über den direkt notierten Namen:
window.blub
Zugriff auf ein Unterobjekt über den Namen, der jedoch steckt in einem String:
window["blub"]
Über eine Variable dann:
var stringMitFunktionsnamen = "blub";
window[stringMitFunktionsnamen]
Ist letztlich alles dasselbe, weil halt die Funktion blub angesprochen wird.
Das bedeutet:
var stringMitFunktionsnamen = "blub";
if (typeof window[stringMitFunktionsnamen]) {
alert("globale Funktion namens " + stringMitFunktionsnamen + " existiert");
}
Hingegen:
if (typeof blub == "function") {
alert("Funktion namens blub existiert");
}
Da das nicht in allen Fällen identisch ist mit dem ersten, kann man die existiert globaler Funktionen auch so abfragen:
if (typeof window.blub == "function") {
alert("globale Funktion blub existiert");
}
Mathias
es hat nicht funktioniert, weil die Funktion nicht existiert hat. JavaScript hat dadurch sofort die Fehlermeldung ausgegeben, dass die Funktion nicht existiert.
Wenn du es richtig machst, sollte keine Fehlermeldung auftreten. Um das Thema »wie kann ich die Existenz von Objekten abfragen, ohne Fehlermeldungen auszulösen« dreht sich doch der gesamte Artikel!
Mathias
Hi,
Objektabfragen und Fallunterscheidungen in JavaScript hilft dir sicher weiter.
Ja, der Link hat geholfen. Danke.
Ich fange die Fehlermeldung jetzt mit try/catch ab und werte sie aus.
Also ausgerechnet die Moeglichkeit, von der dort gesagt wird, dass sie nur in bestimmten Sonderfaellen als sinnvoll zu erachten ist, und im aktuellen eher nicht ...?
MfG ChrisB
Hi,
kann man irgendwie prüfen, ob eine Funktion existiert?
so ähnlich, wie du es versucht hast. Aber eben nur so ähnlich.
if(windowname_der_funktion)
Damit rufst du die Funktion direkt auf und prüfst ihren Rückgabewert, ob er non-zero ist. Was war deine Absicht beim Setzen der Klammern?
Nebenbei ist es nicht nötig, hier extra das window-Objekt zu nennen - es sei denn, der Funktionsname ergibt sich erst zur Laufzeit des Scripts, so dass du ihn nicht als Konstante einsetzen kannst. Das dürfte aber eher ungewöhnlich sein; und wenn, dann gibt es meist elegantere Möglichkeiten, um dasselbe zu erreichen.
Leider funktioniert das nicht.
Und für die Zukunft: Bitte liefere eine aussagekräftige Fehlerbeschreibung. Einfach "funktioniert nicht" ist nichtssagend.
So long,
Martin
if(windowname_der_funktion)
Nebenbei ist es nicht nötig, hier extra das window-Objekt zu nennen
Doch, if (window.func) ist etwas ganz anderes als if (func), auch wenn beides je nach Kontext auf dasselbe Funktionsobjekt zeigt.
http://aktuell.de.selfhtml.org/artikel/javascript/objektabfragen/#obj
http://aktuell.de.selfhtml.org/artikel/javascript/objektabfragen/#obj-eig
Mathias
if(windowname_der_funktion)
Nebenbei ist es nicht nötig, hier extra das window-Objekt zu nennen
Doch, if (window.func) ist etwas ganz anderes als if (func), auch wenn beides je nach Kontext auf dasselbe Funktionsobjekt zeigt.
Besonders bösartige Gesellen machen ja gern sowas (natürlich komplizierter):
<script type="text/javascript">[code lang=javascript](function(global){
var window={alert:function(){}}, alert=function(){};
alert("alert");
window.alert("window.alert");
global.alert("global.alert");})(this);
~~~</script>[/code]
;-)
--
Reden ist Silber, Schweigen ist Gold, meine Ausführungen sind Platin.
Self-Code: sh:( ch:? rl:( br:> n4:( ie:{ mo:) va:) de:> zu:} fl:| ss:| ls:~ js:|