Ist es möglich, eine Klasse zu überprüfen, ob es eine Methode hat oder nicht? Oder sogar eine bestimmte EigenschaftÜberprüfen Sie, ob eine Klasse eine Methode hat
Antwort
var target:Object;// = some object
var name:String;// = some name
if(name in target){
// if property/method exists
}else{
// if property/method not exists
}
+1 Beachten Sie jedoch, dass private/geschützte Eigenschaften/Funktionen des Objekts nicht aufgelistet werden. – Amarghosh
Ja, wahrscheinlich brauche ich es nicht, wenn es privat oder geschützt ist. Danke – numerical25
Dies ist die einzige richtige Antwort, soweit eine Eigenschaft/Methode tatsächlich existiert (d. h. sie ist aufzählbar), da eine Eigenschaft trotz der Beibehaltung des Wertes 'undefiniert' auch mit strikter Gleichheit definiert werden kann. Zum Beispiel: 'var obj: Object = {a: undefiniert};' wird true für 'obj [" a "] === undefined', aber die Eigenschaft" a "ist immer noch definiert, wie die folgende Schleifenverfolgung zeigt "a": 'für (var key: * in obj) Trace (Schlüssel); // verfolgt "a" '. Um die Eigenschaft loszuwerden, müssten Sie 'delete obj [" a "]' aufrufen. Um genau nach einer Nicht-Null-Funktion zu suchen, wäre 'if (Ziel [Name] ist Funktion)' am besten. – Triynko
import flash.utils.describeType;
...
function methodExists(obj:Object,name:String):Boolean
{
var desc:XML=flash.utils.describeType(obj);
return (desc.method.(@name==name).length()>0);
}
(Hinweis: done aus der Spitze von meinem Kopf)
'describeType' listet keine dynamischen Eigenschaften . Versuchen Sie es mit diesem Objekt zum Beispiel: 'var target: Objekt = {a: 123, b:" ASD ", c: function(): void {trace (" hallo ");}}' - gibt die Beschreibung einer Ebene aus Objekt mit nur 'hasOwnProperty',' isPrototypeOf' und 'propertyIsEnumerable'. – Amarghosh
Keine Notwendigkeit, 'describeType' zu verwenden, die sehr langsam ist. – miguelSantirso
describeType kann langsam sein. Wenn Sie jedoch eine Methode zum Verarbeiten des XML in eine objektorientierte Struktur erstellen und diese in einem Wörterverzeichnis nach Typnamen zwischenspeichern, wird der Overhead von describeType nur beim allerersten Durchlauf für einen bestimmten Typ verursacht , nach denen eine einfache Dictionary-Cache-Suche nach Typname sehr schnell ist (getQualifiedClassName (Instanz oder Klasse) ist etwa 3000 mal schneller). Der einzige Haken von describeType besteht darin, dass dynamische Eigenschaften nicht erfasst werden, aber das ist beabsichtigt. – Triynko
Sie können auch Methoden/Eigenschaften aus einem Array/Lookup-Methode aufrufen, wie folgt. Wenn es nicht existiert, wird es "undefiniert" sein, was auch als "falsch" gilt.
var target:Object;// = some object
if(target["propertyName"]){
// if property/method exists
}else{
// if property/method not exists
}
Es ist vielleicht besser, nach undefiniertem 'if (target [" propertyName "] == undefined)' zu suchen. Andernfalls, wenn die Eigenschaft definiert ist, aber auf etwas gesetzt ist, das zu "false" führt (dh eine empty Zeichenfolge, "null", "0" oder "false"), wird dies als "nicht vorhanden" betrachtet. – IQAndreas
Wenn ich versuche, das für eine Funktion zu verwenden, stürzt es mit Fehler 1069 ab - selbst wenn ich nur überprüfe, ob es wahr oder falsch ist. Ich mache es mit dem Schlüsselwort this (für syntaktische Recherche). Warum? – Panzercrisis
Sie müssen strikte Gleichheit (===) verwenden, um 'undefined' zu vergleichen. Außerdem können nur nicht typisierte Variablen 'var x: *' den Wert undefined speichern. Null ist (==) zu undefiniert, aber nicht (===) zu undefiniert. Wenn also die Eigenschaft existiert und null ist, wird der Vergleich mit undefiniert mit == den Wert true zurückgeben, obwohl die Eigenschaft existiert und einen Nullwert enthält. In der Tat, sogar mit strikter Gleichheit, kann eine Eigenschaft * definiert * werden und den Wert "undefiniert" behalten, was immer noch nicht dasselbe ist wie * ist * undefiniert (dh das Ausführen einer for (var key: * in obj) Schleife wird immer noch funktionieren Rückgabe der Immobilie). Daher ist nur 'if (key in obj) 'korrekt. – Triynko
- 1. jQuery überprüfen, ob Element eine Klasse hat
- 2. Überprüfen Sie, ob ein Vorgänger eine Klasse mit jQuery hat
- 3. Überprüfen, ob eine Klasse eine Funktion hat, die Parameter enthält
- 4. Überprüfen Sie, ob eine Zeichenfolge Leerzeichen hat
- 5. Überprüfen Sie, ob eine Klasse existiert
- 6. überprüfen Sie, ob eine C# Methode
- 7. Überprüfen, ob das Kontrollkästchen eine Klasse hat und aktiviert ist
- 8. Überprüfen Sie, ob eine Zeitzone eine bestimmte Zeit überschritten hat
- 9. Überprüfen Sie, ob eine Klassenmethode
- 10. C#: Überprüfen Sie, ob Administrator Schreibzugriff auf eine Datei hat
- 11. rspec Überprüfen, ob eine Methode eine andere Methode aufruft
- 12. Testen, ob eine Klasse ein Attribut hat?
- 13. Überprüfen Sie, ob eine URL hat http: // Präfix
- 14. CIL Anweisungen: Überprüfen Sie, ob eine Getter-Methode aufgerufen wird?
- 15. Wie überprüfen Sie, ob Sie eine neue Methode schreiben oder eine bestehende überschreiben?
- 16. Überprüfen Sie, ob eine Methode in einer erweiterten Klasse, aber nicht in einer übergeordneten Klasse existiert
- 17. Überprüfen Sie, ob ein DataGridView eine DataSource hat
- 18. Überprüfen Sie, ob ein Objekt eine Eigenschaft hat
- 19. Überprüfen Sie, ob Nummer hat eine Ziffer mehrmals
- 20. Überprüfen Sie, ob ein Python-Thread eine Ausnahme ausgelöst hat
- 21. TypeScript - Überprüfen, ob Klasse eine Schnittstelle implementiert
- 22. Überprüfen Sie, ob eine Funktion @classmethod verwendet
- 23. Überprüfen Sie, ob das angeklickte Element keine bestimmte Klasse hat
- 24. Überprüfen Sie, ob eine Klasse eine Unterklasse einer anderen Klasse in Java ist
- 25. Herausfinden, welche Klasse eine Methode aufgerufen hat
- 26. Überprüfen, ob eine Zahl eine ganze Kubikwurzel hat
- 27. überprüfen Sie, ob eine Eigenschaft in einer Klasse existiert
- 28. Überprüfen Sie, ob eine Klassenkonstante existiert
- 29. jQuery Ermitteln, ob eine übereinstimmende Klasse eine angegebene ID hat
- 30. Überprüfen Sie, ob eine SQL-Tabelle existiert
Nun sieht es aus, wenn ich nur eine if-Anweisung, die überprüft, ob Eigenschaft definiert ist funktioniert. Aber was ist mit Methoden – numerical25
Related: [Actionscript (flex): wie wissen, ob eine Eigenschaft des Objekts existiert (oder definiert)?] (http://stackoverflow.com/questions/1520610) –