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
Спецификации
Совместимость с браузерами
| Настольные | Мобильные | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 |
См. также
© 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