Listando los métodos y propiedades de un objeto en JavaScript
En ocasiones nos puede interesar saber las propiedades y los métodos que tiene un objeto, por ejemplo cuando estamos depurando. Para ello podemos hacer uso de la siguiente función:
function inspeccionar(obj)
{
var msg = '';
for (var property in obj)
{
if (typeof obj[property] == 'function')
{
var inicio = obj[property].toString().indexOf('function');
var fin = obj[property].toString().indexOf(')')+1;
var propertyValue=obj[property].toString().substring(inicio,fin);
msg +=(typeof obj[property])+' '+property+' : '+propertyValue+' ;\n';
}
else if (typeof obj[property] == 'unknown')
{
msg += 'unknown '+property+' : unknown ;\n';
}
else
{
msg +=(typeof obj[property])+' '+property+' : '+obj[property]+' ;\n';
}
}
return msg;
}
La función nos devolverá una cadena que contiene una lista con todos los métodos y propiedades del objeto, así como sus tipos y valores.
Podemos madificarla para que nos devuelva, por ejemplo, un array de objetos, lo que nos permitiría procesarlo después. Veamos como quedaría:
function inspeccionar(obj)
{
var msg = new Array();
for (var property in obj)
{
if (typeof obj[property] == 'function')
{
var inicio = obj[property].toString().indexOf('function');
var fin = obj[property].toString().indexOf(')')+1;
var propertyValue=obj[property].toString().substring(inicio,fin);
msg[msg.length] = {'type' : (typeof obj[property]), 'name' : property, 'value' : propertyValue};
}
else if (typeof obj[property] == 'unknown')
{
msg[msg.length] = {'type' : 'unknown', 'name' : property, value : 'unknown'};
}
else
{
msg[msg.length] ={'type' : (typeof obj[property]), 'name' : property, 'value' : obj[property]};
}
}
return msg;
}
Con esta versión podríamos procesar la lista para mostrarla con el formato que más nos guste. Para ello recorreriamos el array devuelto y hariamos lo deseado con cada uno de los elementos. Cada elemento sería un objeto con tres propiedades:
- type: que contiene el tipo de dato.
- name: contiene el nombre de la propiedad o método.
- value: contiene el valor de la propiedad o el prototipo de la función.
