Szukaj…


Wprowadzenie

Serwer proxy w JavaScript może być używany do modyfikowania podstawowych operacji na obiektach. Serwery proxy zostały wprowadzone w ES6. Serwer proxy na obiekcie sam w sobie jest obiektem, który ma pułapki . Pułapki mogą być wyzwalane, gdy operacje są wykonywane na serwerze proxy. Obejmuje to wyszukiwanie właściwości, wywoływanie funkcji, modyfikowanie właściwości, dodawanie właściwości itp. Jeśli nie zdefiniowano żadnej pułapki, operacja jest wykonywana na obiekcie proxy, tak jakby nie było proxy.

Składnia

  • let proxied = new Proxy(target, handler);

Parametry

Parametr Detale
cel Obiekt docelowy, działania na tym obiekcie (pobieranie, ustawienie itp.) Będą kierowane przez moduł obsługi
treser Obiekt, który może definiować „pułapki” do przechwytywania działań na obiekcie docelowym (pobieranie, ustawianie itp.)

Uwagi

Pełna lista dostępnych „pułapek” znajduje się w MDN - Proxy - „Metody obiektu obsługi” .

Bardzo prosty serwer proxy (za pomocą pułapki ustawionej)

Ten serwer proxy po prostu dołącza ciąg " went through proxy" do każdej właściwości ciągu ustawionej w object docelowym.

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

Wyszukiwanie właściwości proxy

Aby wpływać na wyszukiwanie właściwości, należy użyć procedury obsługi get .

W tym przykładzie modyfikujemy wyszukiwanie właściwości, aby zwracana była nie tylko wartość, ale także typ tej wartości. Używamy Reflect, aby to ułatwić.

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow