Considerando que esta pregunta se ha formulado hace algunos años, intentaré agregarle más en función de las tecnologías actuales.
A partir de ECMAScript 6, la metaprogramación ahora es compatible en cierto sentido a través de los objetos Symbol, Reflect y Proxy.
Mediante la búsqueda en la web, he encontrado una serie de artículos muy interesantes sobre el tema, escrito por Keith Kirkel:
Metaprogramming in ES6: Symbols and why they're awesome
En pocas palabras, los símbolos son nuevas primitivas que se pueden agregar dentro de un objeto (sin prácticamente ser propiedades) y son muy útiles para pasarle propiedades de metaprogramación entre otras. Los símbolos tienen que ver con cambiar el comportamiento de las clases existentes al modificarlas (Reflexión dentro de la implementación).
Metaprogramming in ES6: Part 2 - Reflect
En resumen, Reflejar es efectivamente una colección de todos esos “métodos internos” que estaban disponibles exclusivamente a través de las partes internas del motor JavaScript, ahora expuestos en un solo objeto, muy práctico. Su uso es análogo a las capacidades de reflexión de Java y C#. Se utilizan para descubrir información de muy bajo nivel sobre su código (Reflexión a través de la introspección).
Metaprogramming in ES6: Part 3 - Proxies
En resumen, proxies son objetos de controlador, responsables de embalar objetos e interceptar sus comportamientos a través de trampas (reflexión a través de la intercesión).
Por supuesto, estos objetos proporcionan capacidades de metaprogramación específicas, mucho más restrictivas en comparación con los lenguajes de metaprogramación, pero aún así pueden proporcionar formas útiles de metaprogramación básica, principalmente a través de prácticas de Reflexión, de hecho.
Al final, vale la pena mencionar que hay algunos que vale la pena notar ongoing research work en metaprogramación por etapas en JavaScript.
\ * cough \ * http://www.hugoware.net/Projects/jLinq \ * tos \ * –
Puede poner su código en alguna etiqueta HTML o archivo de texto. Entonces puedes tener tu propia DSL con Javascript ... – Philip