Proxies

Run Settings
LanguageJavaScript
Language Version
Run Command
// new Proxy() receives two parameters // 1 - objeto da qual será o proxy // 2- objeto contendo a lista de metódos que serão utilizados para tratar o acesso aos dados do primeiro objeto. (HANDLER) const richard = {status: 'looking for work'}; const handler = { get(target, propName) { console.log(target); // the `richard` object, not `handler` and not `agent` console.log(propName); // the name of the property the proxy (`agent` in this case) is checking return 'You are intercepted' // return target[propName]; } }; const agent = new Proxy(richard, handler); console.log(agent.status); // logs out the richard object (not the agent object!) and the name of the property being accessed (`status`) const richard2 = {status: 'looking for work'}; const handler2 = { set(target, propName, value) { if (propName === 'payRate') { // if the pay is being set, take 15% as commission value = value * 0.85; } target[propName] = value; } }; const agent2 = new Proxy(richard2, handler2); agent.payRate = 1000; // set the actor's pay to $1,000 agent.payRate; // $850 the actor's actual pay //Outras armadilhas //Até aqui, nós vimos as armadilhas get e set (que provavelmente são as mais utilizadas), mas existem um total de 13 armadilhas diferentes que podem ser utilizadas no handler de um proxy! //get - permite que o proxy controle chamadas para acesso à propriedades //set - permite que o proxy controle alterações de valor da propriedade //apply - permite que o proxy controle quando o objeto-alvo é invocado (o objeto-alvo é uma função) //has - permite que o proxy controle o uso do operador in //deleteProperty - permite que o proxy controle quando uma propriedade é deletada //ownKeys - permite que o proxy controle quando todas as chaves são requisitadas //construct - permite que o proxy controle quando o proxy é utilizado com a palavra-chave new, como um construtor //defineProperty - permite que o proxy controle quando defineProperty é utilizado para criar uma nova propriedade no objeto //getOwnPropertyDescriptor - permite que o proxy controle a recuperação da descrição da propriedade //preventExtenions - permite que o proxy controle chamadas ao Object.preventExtensions() no objeto proxy //isExtensible - permite que o proxy controle chamadas ao Object.isExtensible no objeto proxy //getPrototypeOf - permite que o proxy controle chamadas ao Object.getPrototypeOf no objeto proxy //setPrototypeOf - permite que o proxy controle chamadas ao Object.setPrototypeOf no objeto proxy console.log('====== ES5 proxyes ========='); var obj = { _age: 5, _height: 4, get age() { console.log(`getting the "age" property`); console.log(this._age); return this._age; }, get height() { console.log(`getting the "height" property`); console.log(this._height); return this._height; } }; obj.age; // logs 'getting the "age" property' & 5 obj.height; // logs 'getting the "height" property' & 4 obj.weight = 120; // set a new property on the object obj.weight; // logs just 120 console.log('====== ES6 proxyes ========='); const proxyObj = new Proxy({age: 5, height: 4}, { get(targetObj, property) { console.log(`getting the ${property} property`); console.log(targetObj[property]); } }); proxyObj.age; // logs 'getting the age property' & 5 proxyObj.height; // logs 'getting the height property' & 4 proxyObj.weight = 120; // set a new property on the object proxyObj.weight; // logs 'getting the weight property' & 120
Editor Settings
Theme
Key bindings
Full width
Lines