Ich weiß, das ist in Python möglich, aber kann ich eine Liste von Methoden für ein Javascript-Objekt bekommen?Gegeben ein Javascript-Objekt, wie kann ich seine Methoden finden?
Antwort
Sie können die Eigenschaften im Objekt durchlaufen und deren Typ testen.
for(var prop in whatever) {
if(typeof whatever[prop] == 'function') {
//do something
}
}
Um zu den vorhandenen Antworten hinzuzufügen, ECMAScript 5th ED. bietet die Möglichkeit, mit der Methode Object.getOwnPropertyNames
auf alle Eigenschaften eines Objekts (auch auf nicht aufzählbare Objekte) zuzugreifen. Beim Versuch, die Eigenschaften von nativen Objekten wie Math
aufzuzählen, ein for..in
for(var property in Math) {
console.log(property);
}
wird nichts auf der Konsole aus. Allerdings
Object.getOwnPropertyNames(Math)
zurückkehren wird:
["LN10", "PI", "E", "LOG10E", "SQRT2", "LOG2E", "SQRT1_2", "abc", "LN2", "cos", "pow", "log", "tan", "sqrt", "ceil", "asin", "abs", "max", "exp", "atan2", "random", "round", "floor", "acos", "atan", "min", "sin"]
Sie könnten eine Hilfsfunktion auf dieses schreiben, die nur Methoden ein Objekt gegeben zurück.
function getMethods(object) {
var properties = Object.getOwnPropertyNames(object);
var methods = properties.filter(function(property) {
return typeof object[property] == 'function';
});
return methods;
}
> getMethods(Math)
["cos", "pow", "log", "tan", "sqrt", "ceil", "asin", "abs", "max", "exp", "atan2", "random", "round", "floor", "acos", "atan", "min", "sin"]
Unterstützung für ECMAScript 5th Ed. ist an dieser Stelle etwas düster, da nur Chrome, IE9pre3 und Safari/Firefox Nightlies dies unterstützen.
Diese Funktion empfängt ein beliebiges Objekt und gibt den Namen des Prototyps, eine Liste mit allen Methoden und ein Objekt mit dem Namen seiner Eigenschaften (und deren Typen) zurück. Ich habe nicht die Möglichkeit, es in einem Browser zu testen, aber es funktioniert mit Nodejs (v0.10.24).
function inspectClass(obj) {
var objClass, className;
var classProto;
var methods = [];
var attributes = {};
var t, a;
try {
if (typeof(obj) != 'function') {
objClass = obj.constructor;
} else {
objClass = obj;
}
className = objClass.name;
classProto = objClass.prototype
Object.getOwnPropertyNames(classProto).forEach(function(m) {
t = typeof(classProto[m]);
if (t == 'function') {
methods.push(m);
} else {
attributes[m] = t;
}
});
} catch (err) {
className = 'undefined';
}
return { 'ClassName' : className,
'Methods' : methods,
'Attributes' : attributes
}
}
Beispiel (mit NodeJS):
console.log(inspectClass(new RegExp("hello")));
Output:
{ ClassName: 'RegExp',
Methods: [ 'constructor', 'exec', 'test', 'toString', 'compile' ],
Attributes:
{ source: 'string',
global: 'boolean',
ignoreCase: 'boolean',
multiline: 'boolean',
lastIndex: 'number' } }
Die folgenden Beispiele auch mit NodeJS arbeiten:
console.log(inspectClass(RegExp));
console.log(inspectClass("hello"));
console.log(inspectClass(5));
console.log(inspectClass(undefined));
console.log(inspectClass(NaN));
console.log(inspectClass(inspectClass));
Ein einzeiliges Lösung
Object.getOwnPropertyNames(JSON).filter(function(name){ return 'function' === typeof JSON[name]; })
[ 'Parse', 'stringify']
Object.getOwnPropertyNames(String).filter(function(name){ return 'function' === typeof String[name]; })
[ 'fromCharCode', 'fromCodePoint', 'roh']
Object.getOwnPropertyNames(Array).filter(function(name){ return 'function' === typeof Array[name]; })
['isArray', 'from', 'of']
- 1. Grails. JSON. seine Methoden?
- 2. Wie kann ich ungenutzte Methoden in einer Ruby-App finden?
- 3. Wie kann ich Python-Methoden ohne Rückgabeanweisungen finden?
- 4. Wie starte ich ein Programm mit process.start ohne dass das Programm seine Dateien nicht finden kann
- 5. Wie kann ich ein Kinderspiel finden?
- 6. Wie führt Unity seine Methoden aus?
- 7. Wie finden Sie doppelte Methoden?
- 8. Wie kann ich die UIView für ein bestimmtes UITabBarItem finden?
- 9. Wie kann ich den Mindestwert finden und ein Schlüsselwörterbuch eingeben?
- 10. Gegeben ein Dateiname, wie bekomme ich die Adler32 mit Crypto ++
- 11. Versteckter Youtube-Player verliert seine Methoden
- 12. Dynamische Objekt zeigt nicht seine Methoden
- 13. Finden der Alpha gegeben 3 Farben
- 14. Wie kann ich Methoden methodisch in neue Methoden ersetzen?
- 15. Kann ich ein UITableViewCell daran hindern, seine Subviews zu autorisieren?
- 16. Übergeordnete Methoden finden
- 17. ein Objekt gegeben, wie eine Liste von gebundenen Methoden zu erhalten, die während der Laufzeit
- 18. ASP.NET kann ein Objekt erhält seine Attribute
- 19. Wie richte ich einen Rails-Integrationstest für XML-Methoden ein?
- 20. Was ist ein Spektrogramm und wie stelle ich seine Parameter ein?
- 21. Wie finden annotierte Methoden in TypeElement?
- 22. Wie kann ich ungültige Methoden testen?
- 23. Wie kann ich ein UIElement mit Linq finden?
- 24. Wie kann ich ein Speicherleck eines laufenden Prozesses finden?
- 25. Wie kann ich ein Speicherleck auf Heroku finden?
- 26. Einen Aufzählungswert durch seine Beschreibung finden Attribut
- 27. Gegeben ein C# -Typ, erhalten Sie seine Basisklassen und implementierte Schnittstellen
- 28. Wie kann ein Windows-Programm vorübergehend seine Zeitzone ändern?
- 29. Methoden finden, die InvokeRequired benötigen
- 30. Wie entferne ich ein (Sub-) Menü und alle seine Existenzspuren?
+1 jeder Weg 2 die Argumente zu einer Funktion erhalten? – deostroll
Nein. Alle nativen JavaScript-Funktionen akzeptieren sowieso eine beliebige Anzahl von Argumenten. –
@deostroll In einem Browser, der toSource, firefox nur jetzt implementiert, können Sie 'func.toSource(). Match (/ \ (([^ \ (\)] +) \) /) [1]' verwenden. Dies funktioniert jedoch nicht mit integrierten Funktionen. – Annan