Поиск…


Вступление

Прокси-сервер в 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"}`


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow