JavaScript Proxy


A Proxy in JavaScript can be used to modify fundamental operations on objects. Proxies were introduced in ES6. A Proxy on an object is itself an object, that has traps. Traps may be triggered when operations are performed on the Proxy. This includes property lookup, function calling, modifying properties, adding properties, et cetera. When no applicable trap is defined, the operation is performed on the proxied object as if there was no Proxy.


  • let proxied = new Proxy(target, handler);


targetThe target object, actions on this object (getting, setting, etc...) will be routed trough the handler
handlerAn object that can define "traps" for intercepting actions on the target object (getting, setting, etc...)


A full list of available "traps" can be found on MDN - Proxy - "Methods of the handler object".

Very simple proxy (using the set trap)

This proxy simply appends the string " went through proxy" to every string property set on the target object.

let object  = {};

let handler = {
    set(target, prop, value){ // Note that ES6 object syntax is used
        if('string' === typeof value){
            target[prop] = value + " went through proxy";

let proxied = new Proxy(object, handler);

proxied.example = "ExampleValue";

// logs: { example: "ExampleValue went trough proxy" }
// you could also access the object via

Proxying property lookup

To influence property lookup, the get handler must be used.

In this example, we modify property lookup so that not only the value, but also the type of that value is returned. We use Reflect to ease this.

let handler = {
    get(target, property) {
        if (!Reflect.has(target, property)) {
            return {
                value: undefined,
                type: 'undefined'
        let value = Reflect.get(target, property);
        return {
            value: value,
            type: typeof value

let proxied = new Proxy({foo: 'bar'}, handler);
console.log(; // logs `Object {value: "bar", type: "string"}`