handler.get()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.
Thehandler.get() method is a trap for the[[Get]]object internal method, which is used by operations such asproperty accessors.
In this article
Try it
const monster = { secret: "easily scared", eyeCount: 4,};const handler = { get(target, prop, receiver) { if (prop === "secret") { return `${target.secret.substring(0, 4)} ... shhhh!`; } return Reflect.get(...arguments); },};const proxy = new Proxy(monster, handler);console.log(proxy.eyeCount);// Expected output: 4console.log(proxy.secret);// Expected output: "easi ... shhhh!"Syntax
new Proxy(target, { get(target, property, receiver) { }})Parameters
The following parameters are passed to theget() method.this is bound to the handler.
targetThe target object.
propertyA string or
Symbolrepresenting the property name.receiverThe
thisvalue for getters; seeReflect.get(). This is usually either the proxy itself or an object that inherits from the proxy.
Return value
Theget() method can return any value, representing the property value.
Description
>Interceptions
This trap can intercept these operations:
- Property access:
proxy[foo]andproxy.bar Reflect.get()
Or any other operation that invokes the[[Get]]internal method.
Invariants
The proxy's[[Get]] internal method throws aTypeError if the handler definition violates one of the following invariants:
- The value reported for a property must be the same as the value of the corresponding target object property, if the target object property is a non-writable, non-configurable own data property. That is, if
Reflect.getOwnPropertyDescriptor()returnsconfigurable: false, writable: falsefor the property ontarget, then the trap must return the same value as thevalueattribute in thetarget's property descriptor. - The value reported for a property must be
undefined, if the corresponding target object property is a non-configurable own accessor property that has an undefined getter. That is, ifReflect.getOwnPropertyDescriptor()returnsconfigurable: false, get: undefinedfor the property ontarget, then the trap must returnundefined.
Examples
>Trap for getting a property value
The following code traps getting a property value.
const p = new Proxy( {}, { get(target, property, receiver) { console.log(`called: ${property}`); return 10; }, },);console.log(p.a);// "called: a"// 10The following code violates an invariant.
const obj = {};Object.defineProperty(obj, "a", { configurable: false, enumerable: false, value: 10, writable: false,});const p = new Proxy(obj, { get(target, property) { return 20; },});p.a; // TypeError is thrownSpecifications
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver> |