🔥Limited Offer: Get 50% OFFon AI & Full Stack Courses🔥
Back to JavaScript Notes
Topic #237

JS Meta & Proxy

Metaprogramming

Metaprogramming refers to a number of ways a program can manipulate itself:

  • Modify objects at runtime
  • Inspect objects at runtime
  • Control objects at runtime
  • Intercept running operations
  • Modify functions, and classes
  • Generate dynamic code

Note: The Easy Explanation Normally, code handles data. With metaprogramming, code handles code.


Inspecting Objects

With the method Object.keys() you can inspect object properties.

Using Object.keys() is a simple example of metaprogramming.

Example

// Create an Object

const user = {name: "Jan", age: 40};

// Fill Array with Object keys

const myArr = Object.keys(user);

Modify Objects

I typical metaprogramming task is to modify object behaviour:

Example

// Create an Object

const person = {name: "John", age: 41};

// Define "name" to return "secret"

Object.defineProperty(person, "name", {

  get() { return "secret"; }

});

let name = person.name;

Generate Dynamic Code

Metaprogramming involves dynamic code generation.

JavaScript can generate functions at runtime:

Example

const fn = new Function("a", "b", "return a + b");

Metaprogramming Examples

Col 1 Col 2
Consept Description
Validation Restrict the values that can be set to a property
Logging Display property changes using a Proxy
Debugging Intercept an operation using a Proxy
Frameworks Vue, MobX, and Svelte use metaprogramming to detect state changes
ORM / database mapping Wrap objects and creates fields based on database schema
Dynamic APIs Create functions or object structures at runtime

Proxy Metaprogramming

The two objects Proxy and Reflect allow for programming at the meta level in JavaScript.

Proxy can be used to intercept property operations like reading or writing.

In the example below:

  • A user object is wrapped in a Proxy
  • The Proxy uses a set() trap to log whenever a property is set

Example

// Create an Object

const user = {name: "Jan", age: 40};

// Wrap the Object in a Proxy

const proxy = new Proxy(user, {

  // Use a set trap

  set(target, property, value) {

    // Log changes

    log(property + "; " + value);

    return target[property];

  }

});

// Change Properties

proxy.name = "John";

proxy.age = 45;

proxy.name = "Paul";

Proxy with Reflect

Reflect makes Proxy behavior match normal object behavior

In the example below:

  • A user object is wrapped in a Proxy
  • The Proxy uses a set() trap to log when a property is set
  • The set trap uses Reflect.set() for safe forwarding

Example

// Create an Object

const user = {name: "Jan", age: 40};

// Wrap the Object in a Proxy

const proxy = new Proxy(user, {

  // Use a set trap

  set(target, property, value) {

    // Log changes

    log(property + ": " + value);

    // Safe forwarding with Reflect

    return Reflect.set(target, property, value);

  }

});

Note: Learn More JavaScript Reflect Tutorial JavaScript Proxy Tutorial JavaScript Meta Reference

Want to go beyond the notes?

Join CodingNow 2.0's JavaScript course — live mentorship, real projects, and 100% placement support.

Enroll Now — Free Demo Available

JS Meta & Proxy – FAQs

Quick answers about learning JS Meta & Proxy in JavaScript.

This free note from CodingNow 2.0 explains JS Meta & Proxy in JavaScript — concept, syntax and worked code examples you can copy, run and revise before interviews.
Yes. Every JavaScript topic on CodingNow 2.0, including JS Meta & Proxy, is 100% free with no signup required.
With focused practice, most students grasp JS Meta & Proxy in 1–3 days from these notes; pairing it with CodingNow 2.0's mentor-led course takes you to job-ready depth faster.
Use the code examples in this note, then ask doubts for free on the CodingNow 2.0 Community (/community) — expert instructors answer within 24 hours.
WhatsApp
Call NowEnroll Now