Proxy() constructor

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.

Proxy 생성자는 Proxy 객체를 만드는 데 사용됩니다.

구문

js
new Proxy(target, handler);

참고: Proxy()new로만 만들 수 있습니다. new 없이 호출하려고 하면 TypeError가 발생합니다.

매개변수

target

Proxy로 래핑할 대상 객체입니다. 네이티브 배열, 함수 또는 다른 프록시를 포함한 모든 종류의 객체가 될 수 있습니다.

handler

작업이 수행될 때 프록시의 동작을 정의하는 속성이 함수인 객체입니다.

설명

Proxy() 생성자를 사용하여 새 Proxy 객체를 만듭니다. 이 생성자는 두 가지 필수 인수를 사용합니다.

  • target은 프록시를 만들려는 대상 개체입니다.
  • handler는 작업이 수행될 때 프록시의 동작을 정의하는 속성이 함수인 객체입니다.

빈 핸들러는 거의 모든 면에서 대상 객체와 똑같은 동작을 하는 프록시가 생성되며, handler 객체에서 함수의 집합을 정의하여 프록시의 특정 동작을 커스텀할 수 있습니다. 예를 들어, get()을 정의하여 대상 속성 접근자의 사용자 정의 버전을 제공할 수 있습니다.

Handler 함수

이 섹션에서는 정의할 수 있는 모든 처리기 함수를 나열합니다. 처리기 함수는 기본 대상 객체에 대한 호출을 가로채기 때문에 트랩(traps)이라고도 합니다.

handler.apply()

함수 호출에 대한 트랩.

handler.construct()

new 연산자에 대한 트랩.

handler.defineProperty()

Object.defineProperty에 대한 트랩.

handler.deleteProperty()

delete 연산자에 대한 트랩.

handler.get()

속성 값을 가져오기(get) 위한 트랩.

handler.getOwnPropertyDescriptor()

Object.getOwnPropertyDescriptor에 대한 트랩.

handler.getPrototypeOf()

Object.getPrototypeOf에 대한 트랩.

handler.has()

in 연산자에 대한 트랩.

handler.isExtensible()

Object.isExtensible에 대한 트랩.

handler.ownKeys()

Object.getOwnPropertyNamesObject.getOwnPropertySymbols에 대한 트랩

handler.preventExtensions()

Object.preventExtensions에 대한 트랩

handler.set()

속성 값 설정(set)에 대한 트랩.

handler.setPrototypeOf()

Object.setPrototypeOf에 대한 트랩.

예제들

선택적 프록시 속성 접근자

이 예제의 대상 객체는 notProxiedproxied 속성을 가지고 있습니다. 우리는 proxied에 대해 다른 값을 반환하는 처리기를 정의하고 다른 모든 액세스는 대상 객체를 통해 수행되도록 할 것입니다.

js
const target = {
  notProxied: "original value",
  proxied: "original value",
};

const handler = {
  get(target, prop, receiver) {
    if (prop === "proxied") {
      return "replaced value";
    }
    return Reflect.get(...arguments);
  },
};

const proxy = new Proxy(target, handler);

console.log(proxy.notProxied); // "original value"
console.log(proxy.proxied); // "replaced value"

명세서

Specification
ECMAScript Language Specification
# sec-proxy-constructor

브라우저 호환성

BCD tables only load in the browser

같이 보기