Ricerca…


introduzione

Un proxy in JavaScript può essere utilizzato per modificare le operazioni fondamentali sugli oggetti. I proxy sono stati introdotti in ES6. Un Proxy su un oggetto è esso stesso un oggetto, che ha trappole . Le trap possono essere attivate quando vengono eseguite operazioni sul proxy. Ciò include la ricerca di proprietà, la funzione di chiamata, la modifica delle proprietà, l'aggiunta di proprietà, eccetera. Quando non viene definita alcuna trap applicabile, l'operazione viene eseguita sull'oggetto proxy come se non vi fosse alcun proxy.

Sintassi

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

Parametri

Parametro Dettagli
bersaglio L'oggetto target, le azioni su questo oggetto (get, setting, ecc ...) verranno instradate attraverso il gestore
gestore Un oggetto che può definire "trappole" per intercettare azioni sull'oggetto di destinazione (ottenimento, impostazione, ecc ...)

Osservazioni

Un elenco completo di "trap" disponibili può essere trovato su MDN - Proxy - "Metodi dell'oggetto gestore" .

Proxy molto semplice (usando il set trap)

Questo proxy aggiunge semplicemente la stringa " went through proxy" a tutte le proprietà stringa impostate object destinazione.

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

Proxyying ricerca di proprietà

Per influenzare la ricerca delle proprietà, è necessario utilizzare il gestore di get .

In questo esempio, modifichiamo la ricerca della proprietà in modo che non venga restituito solo il valore, ma anche il tipo di tale valore. Usiamo Reflect per facilitare questo.

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow