Constructor Proxy()
===================

El constructor **`Proxy()`** crea objetos `Proxy`.

Sintaxis
--------


```js
new Proxy(target, handler)
```


**Nota:** `Proxy()` solo se puede construir con `new`. Intentar llamarlo sin `new` arroja un `TypeError`.

### Parameters

`target`

Un objeto de destino para envolver con `Proxy`. Puede ser cualquier tipo de objeto, incluida una matriz nativa, una función o incluso otro proxy.

`handler`

Un objeto cuyas propiedades son funciones que definen el comportamiento del proxy cuando se realiza una operación en él.

Descripción
-----------

 Utilice el constructor `Proxy()` para crear un nuevo objeto `Proxy`.
 Este constructor toma dos argumentos obligatorios:

* `target` es el objeto para el que desea crear el proxy
* `handler` es el objeto que define el comportamiento personalizado del proxy.

Un manejador vacío creará un proxy que se comporta, en casi todos los aspectos, exactamente como el objetivo. Al definir cualquiera de un conjunto de funciones en el objeto `handler`, puede personalizar aspectos específicos del comportamiento del proxy. Por ejemplo, al definir `get()` puede proporcionar una versión personalizada del acceso a la propiedad del objetivo.

### Funciones del manejador

Esta sección enumera todas las funciones de manejador que puede definir. Las funciones de manejador a veces se denominan *trampas*, porque atrapan las llamadas al objeto de destino subyacente.

`handler.apply()` (en-US)

Una trampa para una llamada de función.

`handler.construct()` (en-US)

Una trampa para el operador `new`.

`handler.defineProperty()` (en-US)

Una trampa para `Object.defineProperty`.

`handler.deleteProperty()` (en-US)

Una trampa para el operador `delete`.

`handler.get()` (en-US)

Una trampa para obtener valores de propiedad.

`handler.getOwnPropertyDescriptor()`

Una trampa para `Object.getOwnPropertyDescriptor`.

`handler.getPrototypeOf()` (en-US)

Una trampa para `Object.getPrototypeOf`.

`handler.has()` (en-US)

Una trampa para el operador `in`.

`handler.isExtensible()` (en-US)

Una trampa para `Object.isExtensible`.

`handler.ownKeys()` (en-US)

Una trampa para `Object.getOwnPropertyNames` y `Object.getOwnPropertySymbols`.

`handler.preventExtensions()` (en-US)

Una trampa para `Object.preventExtensions`.

`handler.set()`

Una trampa para establecer valores de propiedad.

`handler.setPrototypeOf()` (en-US)

Una trampa para `Object.setPrototypeOf`.

Ejemplos
--------

### Accesores de propiedad proxy selectivamente

En este ejemplo, el objetivo tiene dos propiedades, `notProxied` y `proxied`. Definimos un controlador que devuelve un valor diferente para `proxied` y permite cualquier otro acceso al objetivo.


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

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

const proxy = new Proxy(target, handler);

console.log(proxy.notProxied); // "Valor original"
console.log(proxy.proxied); // "Valor reemplazado"
```

Especificaciones
----------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-proxy-constructor |

Compatibilidad con navegadores
------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Véase también
-------------

* `Proxy` y `Reflect` en la Guía de JavaScript
* `Reflect`