18.1 Overview 18.2 Programming versus metaprogramming 18.2.1 Kinds of metaprogramming 18.3 Proxies explained 18.3.1 An example 18.3.2 Function-specific traps 18.3.3 Intercepting method calls 18.3.4 Revocable Proxies 18.3.5 Proxies as prototypes 18.3.6 Forwarding intercepted operations 18.3.7 Pitfall: not all objects can be wrapped transparently by Proxies 18.4 Use cases for Proxies 18.4.1 Tracing