Поиск…
Вступление
Прокси-сервер в JavaScript может использоваться для изменения основных операций над объектами. Прокси были введены в ES6. Прокси-объект на объекте сам по себе является объектом, у которого есть ловушки . Ловушки могут срабатывать, когда операции выполняются на прокси. Это включает поиск свойств, вызов функции, изменение свойств, добавление свойств и т. Д. Когда подходящая ловушка не определена, операция выполняется на прокси-объекте, как если бы не было прокси.
Синтаксис
- let proxied = new Proxy(target, handler);
параметры
| параметр | подробности | 
|---|---|
| цель | Целевой объект, действия над этим объектом (получение, настройка и т. Д.) Будут маршрутизироваться через обработчик | 
| обработчик | Объект, который может определять «ловушки» для перехвата действий на целевом объекте (получение, настройка и т. Д.) | 
замечания
Полный список доступных «ловушек» можно найти на MDN-Proxy - «Методы объекта-обработчика» .
Очень простой прокси (с использованием ловушки набора)
 Этот прокси просто добавляет строку " went through proxy" в каждое свойство строки, заданное на целевом object . 
let object  = {};
let handler = {
    set(target, prop, value){ // Note that ES6 object syntax is used
        if('string' === typeof value){
            target[prop] = value + " went through proxy";
        }
    }
};
let proxied = new Proxy(object, handler);
proxied.example = "ExampleValue";
console.log(object); 
// logs: { example: "ExampleValue went trough proxy" }
// you could also access the object via proxied.target
Поиск свойств Proxying
 Чтобы влиять на поиск свойств, необходимо использовать обработчик get . 
В этом примере мы модифицируем поиск свойств так, чтобы возвращалось не только значение, но и тип этого значения. Мы используем Reflect для облегчения этого.
let handler = {
    get(target, property) {
        if (!Reflect.has(target, property)) {
            return {
                value: undefined,
                type: 'undefined'
            };
        }
        let value = Reflect.get(target, property);
        return {
            value: value,
            type: typeof value
        };
    }
};
let proxied = new Proxy({foo: 'bar'}, handler);
console.log(proxied.foo); // logs `Object {value: "bar", type: "string"}`