Para muchos usos, no creo espejos serán tan diferente a la reflexión de Java . Lo más importante acerca de los espejos es que desacoplan la API de reflexión de la API de objeto estándar, por lo que en lugar de obj.getClass() se usa reflect (obj). Es una pequeña diferencia en apariencia, pero le da un par de cosas agradables:
- El objeto API no está contaminada, y no hay peligro de romper la reflexión reemplazando un método reflexivo.
- Es posible que tenga diferentes sistemas de espejo. Digamos, uno que no permite el acceso a métodos privados. Esto podría terminar siendo muy útil para las herramientas.
- El sistema de espejo no tiene que ser incluido. Para compilar en JS esto puede ser importante. Si no se utilizan espejos, no hay código fuera de banda para acceder y la poda se vuelve viable.
- Los espejos se pueden hacer para que funcionen en código remoto, no solo en código local, ya que no necesita que el objeto reflejado esté en el mismo Aislante o VM que el espejo.
Así es como espejos son diferentes a la reflexión en Java y Javascript cuando se utiliza para obtener métodos de un objeto:
Java:
myObject.getClass().getMethods(); // returns an array
dardo:
reflect(myObject).type.methods; // returns a map
Javascript:
var methods = [];
for (var m in myObject) {
if (typeof m === 'function') {
methods.push(m);
}
}
¿puedes resumir? –