Быстрые и надежные индивидуальные прокси

3-2-2017

Проксі (proxy) – особливий об’єкт, сенс якого – перехоплювати звернення до іншого об’єкту і, при необхідності, модифікувати їх.

Синтаксис:

let proxy = new Proxy(target, handler)
Тут:

target – об’єкт, звернення до якого треба перехоплювати.
handler – об’єкт з «пастками»: функціями-перехоплювачами для операцій до target.
Майже будь-яка операція може бути перехоплена і оброблена проксі до або навіть замість доступу до об’єкта target, наприклад: читання і запис властивостей, отримання списку властивостей, виклик функції (якщо target – функція) і т. п. Рекомендую быстрые и надежные индивидуальные прокси купить за доступной ценой

Різних типів пасток досить багато.

Спочатку ми докладно розглянемо найважливіші «пастки», а потім подивимося і на їх повний список.

Якщо пастки немає – йде операція над target
Якщо для операції немає пастки, то вона виконується безпосередньо над target.

get/set

Найчастішими є пастки для читання і запису на об’єкт:

get(target, property, receiver)
Спрацьовує при читанні властивості з проксі. Аргументи:
target – цільовий об’єкт, той же який був переданий першим аргументом у new Proxy.
property ім’я властивості.
receiver – об’єкт, до якого було застосовано присвоювання. Зазвичай сам проксі, або прототипно успадковує від нього. Цей аргумент використовується рідко.
set(target, property value, receiver)
Спрацьовує при запису властивості проксі.

Аргументи:

target – цільовий об’єкт, той же який був переданий першим аргументом у new Proxy.

property ім’я властивості.

value – значення властивості.

receiver – об’єкт, до якого було застосовано присвоювання, зазвичай сам проксі, або прототипно успадковує від нього.

Метод set повинен повернути true, якщо присвоєння успішно оброблено і false в разі помилки (приведе до генерації TypeError).

Приклад з виведенням всіх операцій читання та запису:

‘use strict’;

let user = {};

let proxy = new Proxy(user, {
get(target, prop) {
alert(`Читання ${prop}`);
return target[prop];
},
set(target, prop, value) {
alert(`Запис ${prop} ${value}`);
target[prop] = value;
return true;
}
});

proxy.firstName = «Ilya»; // запис

proxy.firstName; // читання

alert(user.firstName); // Ilya
При кожній операції читання і запису властивостей proxy у коді вище спрацьовують методи get/set. Через них значення в кінцевому рахунку потрапляє в об’єкт (чи зчитується з нього).

Можна зробити і позаковыристее.

Методи get/set дозволяють реалізувати доступ до довільним властивостями, яких в об’єкті немає.

Наприклад, у коді нижче словник словник містить різні фрази:

‘use strict’;

let dictionary = {
‘Hello’: ‘Привіт’,
‘Bye’: ‘Поки’
};

alert( dictionary[‘Hello’] ); // Привіт