¿Hay alguna manera de imprimir todos los métodos de un objeto en javascript?¿Hay alguna forma de imprimir todos los métodos de un objeto en javascript?
Respuesta
Claro:
function getMethods(obj) {
var result = [];
for (var id in obj) {
try {
if (typeof(obj[id]) == "function") {
result.push(id + ": " + obj[id].toString());
}
} catch (err) {
result.push(id + ": inaccessible");
}
}
return result;
}
Su uso:
alert(getMethods(document).join("\n"));
Aquí hay una publicación en JS reflection. Debería hacer lo que estás buscando.
De here:
Ejemplo 1: En este ejemplo se escribe a cabo todas las propiedades del objeto "navegador", además de sus valores:
for (var myprop in navigator){
document.write(myprop+": "+navigator[myprop]+"<br>")
}
simplemente reemplazar 'navegante' con cualquier objeto que le interesa y deberías estar listo para ir.
Según lo mencionado por Anthony en la sección de comentarios - Esto devuelve todos los atributos no solo los métodos como la pregunta solicitada.
¡Uy! Eso me enseñará a intentar responder una pregunta en un idioma que no sé. Aún así, creo que el código es útil, pero no lo que se requería.
Esto devuelve todos los atributos no sólo métodos como la cuestión pedido. En IE solo devuelve algunas de las propiedades y ninguno de los métodos. – AnthonyWJones
echar un vistazo a este código: -
function writeLn(s)
{
//your code to write a line to stdout
WScript.Echo(s)
}
function Base() {}
Base.prototype.methodA = function() {}
Base.prototype.attribA = "hello"
var derived = new Base()
derived.methodB = function() {}
derived.attribB = "world";
function getMethods(obj)
{
var retVal = {}
for (var candidate in obj)
{
if (typeof(obj[candidate]) == "function")
retVal[candidate] = {func: obj[candidate], inherited: !obj.hasOwnProperty(candidate)}
}
return retVal
}
var result = getMethods(derived)
for (var name in result)
{
writeLn(name + " is " + (result[name].inherited ? "" : "not") + " inherited")
}
La función getMethod devuelve el conjunto de métodos, junto con el hecho de que el método es uno que ha sido heredado de un prototipo.
Tenga en cuenta que si tiene la intención de utilizar esto en objetos que se suministran desde el contexto como el navegador/objeto DOM, entonces no funcionará IE.
Dado que los métodos en JavaScript son solo propiedades que son funciones, el bucle for..in los enumerará con una excepción: no enumerará los métodos integrados. Hasta donde yo sé, no hay forma de enumerar los métodos integrados. Y no puede declarar sus propios métodos o propiedades en un objeto que no son enumerables de esta manera.
Aquí es una muestra de ES6
.
// Get the Object's methods names:
function getMethodsNames(obj = this) {
return Object.keys(this)
.filter((key) => typeof this[key] === 'function');
}
// Get the Object's methods (functions):
function getMethods(obj = this) {
return Object.keys(this)
.filter((key) => typeof this[key] === 'function')
.map((key) => this[key]);
}
obj = this
es un parámetro predeterminado ES6, puede pasar de un objeto o por defecto lo this
.
Object.keys
devuelve una matriz de propiedades enumerativas propias de Object
. Sobre el objeto window
devolverá [..., 'localStorage', ...'location']
.
(param) => ...
es una función de la flecha ES6, que es una abreviatura de
function(param) {
return ...
}
con un rendimiento implícito.
Array.filter
crea una nueva matriz con todos los elementos que pasan la prueba (typeof this[key] === 'function'
).
Array.map
crea una nueva matriz con los resultados de llamar a una función proporcionada en cada elemento de esta matriz (return this[key]
).
¡Esto es útil! Una corrección: dentro de las funciones se debe usar 'obj' en lugar de' this'. –
Si solo desea ver lo que hay dentro de un objeto, puede imprimir todas las claves del objeto. Algunos de ellos pueden ser variables, algunos - métodos.
El método no es muy preciso, sin embargo, es muy rápido:
console.log(Object.keys(obj));
Eso es muy útil. Es una pena que tu respuesta solo haya recibido un voto explícito (¡de mí, sí!). – Christian
- 1. ¿Hay alguna forma de controlar los cambios en un objeto?
- 2. ¿Hay alguna manera de ajustar todos los métodos de JavaScript con una función?
- 3. ¿Hay alguna forma de extraer/actualizar todos los subrepos?
- 4. ¿Imprimir contenido de objeto JavaScript?
- 5. ¿Hay alguna forma de detener todos los javascript en la página?
- 6. Obtener todos los métodos de instancia de un objeto CoffeeScript
- 7. Capturar todos los métodos/llamadas de mensajes en un objeto
- 8. ¿Hay alguna forma de agrupar métodos en Java/Eclipse?
- 9. ¿Hay alguna forma de detectar si un objeto está bloqueado?
- 10. ¿Hay alguna forma de imprimir la acción SEL?
- 11. ¿Hay alguna razón para deshacerse de los métodos de incrustación de JavaScript en 2011?
- 12. ¿Hay alguna forma de exportar un objeto ActiveRecord a seeds.rb?
- 13. ¿Hay alguna forma en Dojo para encontrar todos los descendientes de widgets en un elemento DOM?
- 14. ¿Cómo enumerar todos los métodos para un objeto en Ruby?
- 15. ¿Hay alguna forma de usar claves variables en un objeto JavaScript literal?
- 16. ¿Hay alguna forma de imprimir javascript console.errors al terminal con Rspec/Capybara/Selenium?
- 17. ¿hay alguna forma de obtener todos los resultados posibles de un patrón de expresión regular?
- 18. ¿Hay alguna forma de ejecutar una lista de diferentes métodos de acción en un objeto en Nunit usando TestCase?
- 19. En Java, ¿hay una forma rápida de volcar todos los argumentos a un método?
- 20. ¿Listar todos los métodos que responde un objeto?
- 21. Ruby: capturando todos los métodos enviados a un objeto
- 22. ¿Hay alguna forma de sobrecargar los métodos de extensión en C#?
- 23. En Java, ¿hay alguna forma de garantizar que se invoquen varios métodos en un bloque finally?
- 24. Imprimir recursivamente todos los archivos de Vim
- 25. ¿Imprimir todos los nombres de métodos de una clase en Ruby?
- 26. ¿Hay alguna manera de imprimir bastante un certificado X509?
- 27. ¿Hay alguna forma de multirreproducir un SqlDataReader?
- 28. ¿Hay alguna manera de ordenar cadenas en todos los idiomas?
- 29. ¿Hay alguna forma de utilizar los métodos de C# directamente como delegados?
- 30. ¿Hay alguna forma de representar el 21 de octubre de 2012 en un objeto `Fecha` de Javascript?
el try/catch es un buen enfoque. Hay algunas propiedades/métodos en IE que generarán un error de acceso. – scunliffe
Sí, creo que también hay algunos en Firefox. – troelskn
Tenga en cuenta que no funciona en algunos objetos integrados como Fecha: 'var a = new Date(); console.log (typeof a, getMethods (a)); ' Devuelve: ' object [] '. – FGM