Xét rằng câu hỏi này được hỏi một vài năm trước, tôi sẽ cố gắng thêm nhiều hơn vào nó dựa trên các công nghệ hiện tại.
Kể từ ECMAScript 6, lập trình meta bây giờ được hỗ trợ theo nghĩa thông qua các đối tượng Symbol, Reflect và Proxy.
Bằng cách tìm kiếm trên web, tôi tìm thấy một loạt các bài báo rất thú vị về đề tài này, được viết bởi Keith kirkel:
Metaprogramming in ES6: Symbols and why they're awesome
Nói tóm lại, biểu tượng là nguyên thủy mới có thể được thêm vào trong một đối tượng (mà không có tính chất thực tế) và rất tiện lợi cho việc chuyển các đặc tính lập trình meta cho nó trong số những thứ khác. Ký hiệu là tất cả về việc thay đổi hành vi của các lớp hiện có bằng cách sửa đổi chúng (Reflection trong thực hiện).
Metaprogramming in ES6: Part 2 - Reflect
Nói tóm lại, Reflect là một cách hiệu quả một bộ sưu tập của tất cả những “phương pháp nội bộ” mà đã có sẵn độc quyền thông qua các internals engine JavaScript, bây giờ tiếp xúc trong một đối tượng duy nhất, tiện dụng. Cách sử dụng của nó tương tự như khả năng phản chiếu của Java và C#. Chúng được sử dụng để khám phá thông tin cấp độ rất thấp về mã của bạn (Phản ánh thông qua nội tâm).
Metaprogramming in ES6: Part 3 - Proxies
Nói tóm lại, Proxy là đối tượng xử lý, chịu trách nhiệm về gói các đối tượng và chặn hành vi của họ thông qua bẫy (Reflection qua lời chuyển cầu).Tất nhiên, những đối tượng này cung cấp khả năng lập trình meta cụ thể, hạn chế hơn nhiều so với ngôn ngữ lập trình meta, nhưng vẫn có thể cung cấp các cách lập trình meta cơ bản, chủ yếu thông qua thực hành phản chiếu.
Cuối cùng, điều đáng nói đến là có một số thông báo đáng chú ý ongoing research work về lập trình meta theo giai đoạn trong JavaScript.
\ * ho \ * http://www.hugoware.net/Projects/jLinq \ * cough \ * –
Bạn có thể đặt mã của mình vào một số thẻ HTML hoặc tệp văn bản. Sau đó, bạn có thể có DSL của riêng bạn với Javascript ... – Philip