From 074785cea106179cb3305637055ab0a009ca74f2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:42:52 -0500 Subject: initial commit --- .../proxy/handler/deleteproperty/index.html | 131 +++++++++++++++ .../global_objects/proxy/handler/index.html | 134 +++++++++++++++ .../global_objects/proxy/handler/set/index.html | 179 +++++++++++++++++++++ 3 files changed, 444 insertions(+) create mode 100644 files/ru/web/javascript/reference/global_objects/proxy/handler/deleteproperty/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/proxy/handler/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/proxy/handler/set/index.html (limited to 'files/ru/web/javascript/reference/global_objects/proxy/handler') diff --git a/files/ru/web/javascript/reference/global_objects/proxy/handler/deleteproperty/index.html b/files/ru/web/javascript/reference/global_objects/proxy/handler/deleteproperty/index.html new file mode 100644 index 0000000000..a796a08e26 --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/proxy/handler/deleteproperty/index.html @@ -0,0 +1,131 @@ +--- +title: handler.deleteProperty() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/handler/deleteProperty +tags: + - Прокси + - метод +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/deleteProperty +--- +
{{JSRef}}
+ +

Метод handler.deleteProperty() является "ловушкой" (функция-перехватчик) для оператора {{jsxref("Operators/delete", "delete")}}.

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-deleteproperty.html", "taller")}}
+ + + +

Синтаксис

+ +
var p = new Proxy(target, {
+  deleteProperty: function(target, property) {
+  }
+});
+
+ +

Параметры

+ +

Следующие параметры передаются в метод deleteProperty.

+ +
+
target
+
Целевой объект.
+
property
+
Имя или {{jsxref("Symbol")}} свойства, которое нужно удалить.
+
+ +

this в момент вызова ссылается на объект handler.

+ +

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

+ +

Метод deleteProperty должен возвращать {{jsxref("Boolean")}}. Значение true, если свойство было успешно удалено, в противном случае false.

+ +

Описание

+ +

Метод handler.deleteProperty() является "ловушкой" для оператора {{jsxref("Operators/delete", "delete")}}.

+ +

Перехваты

+ +

Данная "ловушка" может перехватывать следующие операции:

+ + + +

Инварианты

+ +

Если следующие инварианты нарушены, то прокси выдаст ошибку {{jsxref("TypeError")}}:

+ + + +

Примеры

+ +

Следующий код перехватывает действие оператора {{jsxref("Operators/delete", "delete")}}.

+ +
var p = new Proxy({}, {
+  deleteProperty: function(target, prop) {
+    if (prop in target){
+      delete target[prop]
+      console.log('property removed: ' + prop)
+      return true
+    }
+    else {
+      console.log('property not found: ' + prop)
+      return false
+    }
+  }
+})
+
+var result
+
+p.a = 10
+console.log('a' in p)  // true
+
+result = delete p.a    // "property removed: a"
+console.log(result)    // true
+console.log('a' in p)  // false
+
+result = delete p.a    // "property not found: a"
+console.log(result)    // false
+
+ +

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

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-delete-p', '[[Delete]]')}}{{Spec2('ES2015')}}Initial definition.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-delete-p', '[[Delete]]')}}{{Spec2('ESDraft')}} 
+ +

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

+ +
+ + +

{{Compat("javascript.builtins.Proxy.handler.deleteProperty")}}

+
+ +

Смотри также

+ + diff --git a/files/ru/web/javascript/reference/global_objects/proxy/handler/index.html b/files/ru/web/javascript/reference/global_objects/proxy/handler/index.html new file mode 100644 index 0000000000..eef887a246 --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/proxy/handler/index.html @@ -0,0 +1,134 @@ +--- +title: Proxy handler +slug: Web/JavaScript/Reference/Global_Objects/Proxy/handler +tags: + - ECMAScript 2015 + - JavaScript + - NeedsTranslation + - Proxy + - TopicStub + - Прокси + - Русский + - ловушки +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy +--- +
{{JSRef}}
+ +

Объект-обработчик прокси - это объект, который содержит ловушки для {{jsxref("Proxy", "proxies", "", 1)}}.

+ +

Методы

+ +

Все ловушки ставятся по желанию разработчика. Если ловушка не была определена, то, по умолчанию, операция перенаправляется на исходный объект (target).

+ +
+
{{jsxref("Global_Objects/Proxy/handler/getPrototypeOf", "handler.getPrototypeOf()")}}
+
Ловушка для {{jsxref("Object.getPrototypeOf")}}.
+
{{jsxref("Global_Objects/Proxy/handler/setPrototypeOf", "handler.setPrototypeOf()")}}
+
Ловушка для {{jsxref("Object.setPrototypeOf")}}.
+
{{jsxref("Global_Objects/Proxy/handler/isExtensible", "handler.isExtensible()")}}
+
Ловушка для {{jsxref("Object.isExtensible")}}.
+
{{jsxref("Global_Objects/Proxy/handler/preventExtensions", "handler.preventExtensions()")}}
+
Ловушка для {{jsxref("Object.preventExtensions")}}.
+
{{jsxref("Global_Objects/Proxy/handler/getOwnPropertyDescriptor", "handler.getOwnPropertyDescriptor()")}}
+
Ловушка для {{jsxref("Object.getOwnPropertyDescriptor")}}.
+
{{jsxref("Global_Objects/Proxy/handler/defineProperty", "handler.defineProperty()")}}
+
Ловушка для {{jsxref("Object.defineProperty")}}.
+
{{jsxref("Global_Objects/Proxy/handler/has", "handler.has()")}}
+
Ловушка для оператора {{jsxref("Operators/in", "in")}}.
+
{{jsxref("Global_Objects/Proxy/handler/get", "handler.get()")}}
+
Ловушка для получения значений из свойств.
+
{{jsxref("Global_Objects/Proxy/handler/set", "handler.set()")}}
+
Ловушка для установки значений в свойства.
+
{{jsxref("Global_Objects/Proxy/handler/deleteProperty", "handler.deleteProperty()")}}
+
Ловушка для оператора {{jsxref("Operators/delete", "delete")}}.
+
{{jsxref("Global_Objects/Proxy/handler/ownKeys", "handler.ownKeys()")}}
+
Ловушка для {{jsxref("Object.getOwnPropertyNames")}} и {{jsxref("Object.getOwnPropertySymbols")}}.
+
{{jsxref("Global_Objects/Proxy/handler/apply", "handler.apply()")}}
+
Ловушка для вызова функции.
+
{{jsxref("Global_Objects/Proxy/handler/construct", "handler.construct()")}}
+
Ловушка для оператора {{jsxref("Operators/new", "new")}}.
+
+ +

Некоторые нестандартные ловушки устарели и были удалены.

+ +

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

+ + + + + + + + + + + + + + + + + + + +
СпецификацияСтатусКомментарий
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots', 'Proxy Object Internal Methods and Internal Slots')}}{{Spec2('ES2015')}}Определении при инициализации.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots', 'Proxy Object Internal Methods and Internal Slots')}}{{Spec2('ESDraft')}}Обработчик enumerate был удален.
+ +

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

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support49 [1]{{ CompatGeckoDesktop("18") }}12{{CompatOpera(36)}}{{CompatSafari(10)}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatNo}}{{CompatNo}}{{ CompatGeckoDesktop("18") }}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +

[1] Разрешен по умолчанию.

+ +

Смотрите также

+ + diff --git a/files/ru/web/javascript/reference/global_objects/proxy/handler/set/index.html b/files/ru/web/javascript/reference/global_objects/proxy/handler/set/index.html new file mode 100644 index 0000000000..88b030ecc4 --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/proxy/handler/set/index.html @@ -0,0 +1,179 @@ +--- +title: handler.set() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/handler/set +tags: + - Прокси + - метод +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/set +--- +
{{JSRef}}
+ +

Метод handler.set() является ловушкой для установки значения свойству.

+ +

Синтаксис

+ +
var p = new Proxy(target, {
+  set: function(target, property, value, receiver) {
+  }
+});
+
+ +

Параметры

+ +

Следующие параметры передаются методу set() . this привязан к обработчику

+ +
+
target
+
Исходный обьект, который проксируется.
+
property
+
Имя свойства, в которое устанавливается значение value.
+
value
+
Значение, устанавливаемое в свойство property.
+
receiver
+
Объект, которому первоначально было присвоено задание. Обычно это сам прокси. Но обработчик set() также может быть вызван косвенно, через цепочку прототипов или различными другими способами.
+      Например, предположим, что скрипт выполняет
obj.name = "jen", при этом obj не является прокси и не имеет собственного свойства .name, но имеет прокси в цепочке прототипов. Будет вызван обработчик прокси set() , а obj будет передан в качестве получателя.
+
+
+ +

Возвращаемые результаты

+ +

Метод set должен возвращать boolean значение.

+ + + +

Описание

+ +

Метод handler.set является ловушкой для установки значения свойству.

+ +

Перехват

+ +

Эта ловушка может перехватывать следующие операции:

+ + + +

Инварианты

+ +

Если нарушены следующие инваринаты, то proxy выбросит {{jsxref("TypeError")}}:

+ + + +

Примеры

+ +

Следующий код перехватывает установку значения свойству.

+ +
var p = new Proxy({}, {
+  set: function(target, prop, value, receiver) {
+    target[prop] = value
+    console.log('property set: ' + prop + ' = ' + value)
+    return true
+  }
+})
+
+console.log('a' in p)  // false
+
+p.a = 10               // "property set: a = 10"
+console.log('a' in p)  // true
+console.log(p.a)       // 10
+
+ +

Specifications

+ + + + + + + + + + + + + + + + + + + +
СпецификацияСтатусКомментарий
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver', '[[Set]]')}}{{Spec2('ES2015')}}Initial definition.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver', '[[Set]]')}}{{Spec2('ESDraft')}}
+ +

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

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatChrome("61")}}{{CompatGeckoDesktop("18")}}{{CompatUnknown}}{{CompatUnknown}}{{CompatSafari("10.1")}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatUnknown}}{{CompatUnknown}}{{CompatGeckoMobile("18")}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +

Смотрите также

+ + -- cgit v1.2.3-54-g00ecf