Spec-Zone.ru › JavaScript

Proxy.revocable()

Базовый уровень Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с сентября 2016 года.

Статический метод Proxy.revocable() создаёт отзываемый объект Proxy.

Синтаксис

Proxy.revocable(target, handler)

Параметры

target
Целевой объект, который нужно обернуть с помощью Proxy. Это может быть любой тип объекта, включая нативный массив, функцию или даже другой прокси.
handler
Объект, свойствами которого являются функции, определяющие поведение proxy при выполнении операции над ним.

Возвращаемое значение

Простой объект со следующими двумя свойствами:

proxy
Объект Proxy, точно такой же, как тот, что создаётся вызовом new Proxy(target, handler).
revoke
Функция без параметров для отзыва (отключения) proxy.

Описание

Фабричная функция Proxy.revocable() аналогична конструктору Proxy(), за исключением того, что в дополнение к созданию прокси-объекта она также создаёт функцию revoke, которую можно вызвать для отключения прокси. Прокси-объект и функция revoke обёрнуты в простой объект.

Функция revoke не принимает никаких параметров и не зависит от значения this. Созданный объект proxy прикреплён к функции revoke как приватное поле, к которому функция revoke обращается при вызове (существование приватного поля не наблюдаемо извне, но оно влияет на то, как происходит сборка мусора). Объект proxy не захватывается замыканием функции revoke (что сделало бы сборку мусора proxy невозможной, если revoke всё ещё активен).

После вызова функции revoke() прокси становится непригодным для использования: любая ловушка к обработчику вызывает TypeError. После отзыва прокси он остаётся отозванным, и повторный вызов revoke() не имеет никакого эффекта — фактически, вызов revoke() отсоединяет объект proxy от функции revoke, поэтому функция revoke вообще не сможет снова получить доступ к прокси. Если на прокси нет ссылок в других местах, он будет подлежать сборке мусора. Функция revoke также отсоединяет target и handler от proxy, поэтому, если на target нет ссылок в других местах, он также будет подлежать сборке мусора, даже если его прокси всё ещё активен, поскольку больше нет способа осмысленно взаимодействовать с целевым объектом.

Разрешение пользователям взаимодействовать с объектом через отзываемый прокси позволяет вам контролировать время жизни объекта, предоставленного пользователю — вы можете сделать объект доступным для сборки мусора, даже когда пользователь всё ещё хранит ссылку на его прокси.

Примеры

Использование Proxy.revocable()

const revocable = Proxy.revocable(
  {},
  {
    get(target, name) {
      return `[[${name}]]`;
    },
  },
);
const proxy = revocable.proxy;
console.log(proxy.foo); // "[[foo]]"

revocable.revoke();

console.log(proxy.foo); // TypeError is thrown
proxy.foo = 1; // TypeError again
delete proxy.foo; // still TypeError
typeof proxy; // "object", typeof doesn't trigger any trap

Спецификации

Спецификация
ECMAScript® 2027 Language Specification
# sec-proxy.revocable

Совместимость с браузерами

Настольные Мобильные Сервер
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
revocable
63
12
34
50
10
63
34
46
10
8.0
63
10
1.0.0
1.0
6.0.0

См. также

  • Proxy

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/revocable

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API