Sé que esto es posible en Python, pero ¿puedo obtener una lista de métodos para un objeto javascript?Dado un objeto javascript arbitrario, ¿cómo puedo encontrar sus métodos?
Respuesta
Puede recorrer las propiedades del objeto y probar su tipo.
for(var prop in whatever) {
if(typeof whatever[prop] == 'function') {
//do something
}
}
Para agregar a las respuestas existentes, ECMAScript 5th ed. proporciona una forma de acceder a todas las propiedades de un objeto (incluso las no enumerables) utilizando el método Object.getOwnPropertyNames
. Al tratar de enumerar las propiedades de los objetos nativos tales como Math
, un for..in
for(var property in Math) {
console.log(property);
}
imprimirá nada en la consola. Sin embargo,
Object.getOwnPropertyNames(Math)
volverá:
["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"]
Se puede escribir una función auxiliar en la parte superior de esta que solo vuelve métodos dados un objeto.
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"]
Compatibilidad con ECMAScript 5th ed. es algo desalentador en este punto, ya que solo Chrome, IE9pre3 y Safari/Firefox son compatibles.
Esta función recibe un objeto arbitrario y devuelve el nombre de su prototipo, una lista con todos sus métodos y un objeto con el nombre de sus propiedades (y sus tipos). No tengo la oportunidad de probarlo en un navegador, pero funciona con 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
}
}
Ejemplo (con nodejs):
console.log(inspectClass(new RegExp("hello")));
de salida:
{ ClassName: 'RegExp',
Methods: [ 'constructor', 'exec', 'test', 'toString', 'compile' ],
Attributes:
{ source: 'string',
global: 'boolean',
ignoreCase: 'boolean',
multiline: 'boolean',
lastIndex: 'number' } }
Los siguientes ejemplos también trabajan con nodejs:
console.log(inspectClass(RegExp));
console.log(inspectClass("hello"));
console.log(inspectClass(5));
console.log(inspectClass(undefined));
console.log(inspectClass(NaN));
console.log(inspectClass(inspectClass));
Una solución de una sola línea
Object.getOwnPropertyNames(JSON).filter(function(name){ return 'function' === typeof JSON[name]; })
[ 'de análisis sintáctico', 'stringify']
Object.getOwnPropertyNames(String).filter(function(name){ return 'function' === typeof String[name]; })
[ 'fromCharCode', 'fromCodePoint', 'prima']
Object.getOwnPropertyNames(Array).filter(function(name){ return 'function' === typeof Array[name]; })
['isArray', 'from', 'of']
- 1. ¿Cómo encontrar métodos anotados en un paquete dado?
- 2. Encontrar qué métodos tiene un objeto Python
- 3. ¿Cómo puedo copiar profundamente un objeto arbitrario en GWT?
- 4. Obtener métodos Objeto R
- 5. Usando LINQ, ¿cómo puedo encontrar un objeto con un valor de propiedad dado de una lista?
- 6. ¿Cómo puedo hacer un objeto JS llamable con un prototipo arbitrario?
- 7. ¿Cómo puedo registrar un elemento HTML como un objeto JavaScript?
- 8. ¿Cómo registrar elementos internos de un objeto arbitrario en Java?
- 9. ¿Cómo encontrar una DLL dado un CLSID?
- 10. ¿Cómo puedo encontrar el elemento de matriz más cercano a un número arbitrario (no miembro)?
- 11. javascript cómo encontrar el número de hijos en un objeto
- 12. ¿Cómo puedo probar los métodos en un objeto de método?
- 13. ¿Cómo puedo pasar un objeto arbitrario al informe de jaspe como parámetro?
- 14. Objeto de modelo dado, ¿cómo encontrar la ruta de índice en NSTreeController?
- 15. ¿Cómo puedo encontrar el centro del objeto?
- 16. ¿Cómo enumero los métodos disponibles en un objeto o paquete dado en Perl?
- 17. ¿Cómo puedo encontrar el PROPIETARIO de un objeto en Oracle?
- 18. jQuery: dado un selector, encuentre solo sus elementos visibles
- 19. LD_LIBRARY_PATH: cómo encontrar un objeto compartido
- 20. Python: Call todos los métodos de un objeto con un conjunto dado de argumentos
- 21. Al migrar de Subversion a Git, ¿cómo puedo encontrar un compromiso dado un número de revisión?
- 22. Dado un gran conjunto de vértices en un polígono no convexo, ¿cómo puedo encontrar los bordes?
- 23. Dado un tiempo, ¿cómo puedo encontrar el tiempo hace un mes
- 24. ¿Cómo puedo encontrar un nombre de archivo, dado un puntero ARCHIVO?
- 25. Javascript: Llamar a métodos de objeto dentro de ese objeto
- 26. ¿Cómo encontrar métodos simples particulares
- 27. objeto clonado Javascript pierde sus funciones de prototipo
- 28. Cómo reemplazar un objeto en un NSMutableArray en un índice dado con un nuevo objeto
- 29. ¿Cómo llamar al método genérico con un objeto Tipo dado?
- 30. Métodos del objeto matemático Javascript - negativos a cero
+1 de cualquier manera 2 ¿obtener los argumentos para una función? – deostroll
No. Todas las funciones nativas de JavaScript aceptan cualquier número de argumentos de todos modos. –
@deostroll En un navegador que implementa toSource, Firefox solo ahora mismo, puede usar 'func.toSource(). Match (/ \ ((^^(\)] +) \) /) [1]'. Sin embargo, esto no funcionará en las funciones incorporadas. – Annan