javascript

Enumerar todas las propiedades de prototipo de un objeto Javascript



(2)

¿Hay alguna otra forma de buscar las propiedades del prototipo de un objeto javascript? Digamos que tengo así.

function proton() { this.property1 = undefined; this.property2 = undefined; }; proton.prototype = { sample1 : function() { return ''something''; }, sample2 : function() { return ''something''; } }; var my_object = new proton(); console.log(Object.keys(my_object));

devuelve ["propiedad1", "propiedad2"]

console.log(Object.getOwnPropertyNames(my_object));

devuelve ["propiedad1", "propiedad2"]

Pero lo que quiero imprimir son las propiedades del prototipo del objeto my_object.

[''muestra1'', ''muestra2'']

Para poder ver las propiedades del prototipo de ese objeto, necesito console.log (objeto) y, desde las herramientas del desarrollador, puedo buscar las propiedades de ese objeto.

Pero como estoy usando bibliotecas de terceros como phaser.js, react.js, create.js, entonces no conozco la lista de propiedades prototipo de un objeto creado a partir de estas bibliotecas.

¿Existe alguna función prototipo de Object para enumerar todas las propiedades de prototpye de un objeto javascript?


No es un método de prototipo, pero puede usar Object.getPrototypeOf para atravesar la cadena del prototipo y luego obtener los propios nombres de propiedad de cada uno de esos objetos.

function logAllProperties(obj) { if (obj == null) return; // recursive approach console.log(Object.getOwnPropertyNames(obj)); logAllProperties(Object.getPrototypeOf(obj)); } logAllProperties(my_object);

Con esto, también puede escribir una función que le devuelva una matriz de todos los nombres de propiedades:

function props(obj) { var p = []; for (; obj != null; obj = Object.getPrototypeOf(obj)) { var op = Object.getOwnPropertyNames(obj); for (var i=0; i<op.length; i++) if (p.indexOf(op[i]) == -1) p.push(op[i]); } return p; } console.log(props(my_object)); // ["property1", "property2", "sample1", "sample2", "constructor", "toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable"


function prototypeProperties(obj) { var result = []; for (var prop in obj) { if (!obj.hasOwnProperty(prop)) { result.push(prop); } } return result; }

EDITAR: Esto tomará todas las propiedades que se definieron en cualquier antepasado. Si desea un control más granular de lo que se define dónde, la sugerencia de Bergi es buena.