Necesito ayuda para escribir una función de javascript que obtenga una clase como parámetro e imprima todas sus propiedades públicas (nombre y valor) usando la reflexión con sangría.
Algunas propiedades pueden ser de clase de tipo, por lo que las propiedades deben imprimirse con la sangría correcta.
Ejemplo:
Class A { a1; a2; constructor() { this.a1 = 'a'; this.a2 = 2; } } Class B { b1; b2; constructor() { this.b1 = true; this.b2 = new A(); } } Al obtener class B como parámetro, la salida debe ser:
Object: ---------------------------------------- b1 = true, b2 = Object: ---------------------------------------- a1 = "a", a2 = 2 {¡Gracias!
Podría usar una función recursiva que devuelva una cadena formateada de forma recursiva,
class A { a1 = 'a'; a2 = 2; } class B { b1 = true; b2 = new A; } function format(object, indent_lvl = 1) { let str = "Object:\n" + "\t".repeat(indent_lvl - 1) + "----------------------------------------"; let indent = "\n" + "\t".repeat(indent_lvl); for (let [key, value] of Object.entries(object)) { if (typeof value == "object") value = indent + format(value, indent_lvl + 1); str += indent + key + " = " + value; } return str; } console.log(format(new B))