conceptos-metaprogramacion-introspection-introspection-en-javascript
Javascript tiene soporte para introspection y self-modification pero no a través de un API (es decir, no a través de un MOP), sino en el mismo lenguaje.
Intentemos el mismo ejemplo del libro. Definimos el objeto:
var libro = {
titulo: "El Juego de Ender",
autor: "Orson Scott Card",
cliente: null,
prestarA: function(cliente) {
if (this.cliente != null) throw "Libro ya prestado!!"
this.cliente = cliente;
}
}
Imprimimos los slots del objeto:
println("Un objeto")
for (property in libro) {
println(` con ${property}`)
}
Fíjense que acá está el soporte del lenguaje con el keyword in
Esto genera:
Un objeto
con titulo
con autor
con cliente
con prestarA
Ahora accedamos a un slot en particular:
println("Titulo: " + libro["titulo"])
Podemos checkear si un slot existe en el objeto con:
println("Tiene Autor? " + ("autor" in libro))
Obviamente tambíen podemos invocar un método:
libro["prestarA"].apply(libro, ["Lector Frecuente"])
Fíjense que acá se ve que el libro["prestarA"]
nos está retornando un objeto de tipo Function que tiene el método apply que básicamente la ejecuta pasándole como parámetro el objeto target this y luego un array de argumentos.
Modificar una variable
libro["titulo"] = "Ubik"