У цьому посібнику ви дізнаєтесь про проксі-сервери JavaScript за допомогою прикладів.
У JavaScript проксі-сервери (проксі-об'єкт) використовуються для обгортання об'єкта та перевизначення різних операцій в об'єкті, таких як читання, вставка, перевірка і т. Д. Проксі-сервер дозволяє додавати власну поведінку до об'єкта або функції.
Створення проксі-об'єкта
Синтаксис проксі:
new Proxy(target, handler);
Ось,
new Proxy()
- конструктор.target
- об'єкт / функція, яку ви хочете проксі-серверомhandler
- може перевизначити власну поведінку об’єкта
Наприклад,
let student1 = ( age: 24, name: "Felix" ) const handler = ( get: function(obj, prop) ( return obj(prop) ? obj(prop) : 'property does not exist'; ) ) const proxy = new Proxy(student1, handler); console.log(proxy.name); // Felix console.log(proxy.age); // 24 console.log(proxy.class); // property does not exist
Тут get()
метод використовується для доступу до значення властивості об’єкта. І якщо властивість недоступна в об'єкті, вона повертає властивість не існує.
Як бачите, ви можете використовувати проксі-сервер для створення нових операцій з об’єктом. Випадок може виникнути, коли ви хочете перевірити, чи має об’єкт певний ключ, і виконати дію на основі цього ключа. У таких випадках можна використовувати довірені особи.
Ви також можете передати порожній обробник. Коли передається порожній обробник, проксі поводиться як оригінальний об'єкт. Наприклад,
let student = ( name: 'Jack', age: 24 ) const handler = ( ); // passing empty handler const proxy1 = new Proxy(student, ()); console.log(proxy1); // Proxy (name: "Jack", age: 24) console.log(proxy1.name); // Jack
Обробники проксі
Проксі надає два методи обробника get()
і set()
.
обробник get ()
get()
Метод використовується для доступу до властивостей цільового об'єкта. Наприклад,
let student = ( name: 'Jack', age: 24 ) const handler = ( // get the object key and value get(obj, prop) ( return obj(prop); ) ) const proxy = new Proxy(student, handler); console.log(proxy.name); // Jack
Тут get()
метод бере об'єкт і властивість як свої параметри.
обробник set ()
set()
Метод використовується для установки значення об'єкта. Наприклад,
let student = ( name: 'John' ) let setNewValue = ( set: function(obj, prop, value) ( obj(prop) = value; return; ) ); // setting new proxy let person = new Proxy(student, setNewValue); // setting new key/value person.age = 25; console.log(person); // Proxy (name: "John", age: 25)
Тут age
до об’єкта студента додається нова властивість .
Використання проксі
1. Для перевірки
Ви можете використовувати проксі-сервер для перевірки. Ви можете перевірити значення ключа та виконати дію на основі цього значення.
Наприклад,
let student = ( name: 'Jack', age: 24 ) const handler = ( // get the object key and value get(obj, prop) ( // check condition if (prop == 'name') ( return obj(prop); ) else ( return 'Not allowed'; ) ) ) const proxy = new Proxy(student, handler); console.log(proxy.name); // Jack console.log(proxy.age); // Not allowed
Тут доступна лише властивість name об’єкта студента. В іншому випадку повертається Не дозволяється.
2. Перегляд об'єкта лише для читання
Бувають випадки, коли ви не хочете, щоб інші вносили зміни в об’єкт. У таких випадках ви можете використовувати проксі-сервер, щоб зробити об’єкт лише читабельним. Наприклад,
let student = ( name: 'Jack', age: 23 ) const handler = ( set: function (obj, prop, value) ( if (obj(prop)) ( // cannot change the student value console.log('Read only') ) ) ); const proxy = new Proxy(student, handler); proxy.name = 'John'; // Read only proxy.age = 33; // Read only
У наведеній вище програмі не можна жодним чином мутувати об'єкт.
Якщо хтось намагається будь-яким чином мутувати об’єкт, ви отримаєте лише рядок із написом Лише читання.
3. Побічні ефекти
Ви можете використовувати проксі-сервер для виклику іншої функції, коли умова виконана. Наприклад,
const myFunction = () => ( console.log("execute this function") ); const handler = ( set: function (target, prop, value) ( if (prop === 'name' && value === 'Jack') ( // calling another function myFunction(); ) else ( console.log('Can only access name property'); ) ) ); const proxy = new Proxy((), handler); proxy.name = 'Jack'; // execute this function proxy.age = 33; // Can only access name property
Проксі-сервер JavaScript був представлений з версії JavaScript ES6 . Деякі браузери можуть не повністю підтримувати його використання. Щоб дізнатись більше, відвідайте проксі-сервер JavaScript.