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"}`