Skip to content

Instantly share code, notes, and snippets.

@netojoaobatista
Created April 25, 2012 19:16
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save netojoaobatista/2492426 to your computer and use it in GitHub Desktop.
Save netojoaobatista/2492426 to your computer and use it in GitHub Desktop.
Exemplo simples de uso da API antiga de ECMAScript Proxy
/**
* Um objeto de origem qualquer
*/
var o = { x: 10, y: 10 };
/**
* Criação do Proxy (API antiga).
* Cada uma dessas propriedades do proxy representa uma operação no objeto de origem; O proxy
* receberá a operação e delegará (ou não) para o objeto de origem.
*/
var p = Proxy.create( {
//
"getOwnPropertyDescriptor": function(name) {
var desc = Object.getOwnPropertyDescriptor(o, name);
if (desc !== undefined) { desc.configurable = true; }
console.log("Proxy.getOwnPropertyDescriptor("+name+")");
return desc;
},
"getOwnPropertyNames": function() {
console.log("Proxy.getOwnPropertyNames()");
return Object.getOwnPropertyNames(o);
},
"defineProperty": function(name, desc) {
console.log("Proxy.defineProperty("+name+","+JSON.stringify(desc)+")");
Object.defineProperty(o, name, desc);
},
"delete": function(name) {
console.log("Proxy.delete("+name+")");
return delete o[name];
},
"has": function(name) {
console.log("Proxy.has("+name+")");
return name in o;
},
"get": function(receiver, name) {
console.log("Proxy.get("+name+")");
return o[name];
},
"set": function(receiver, name, val) {
console.log("Proxy.set("+name+", "+JSON.stringify(val)+")");
o[name] = val;
return true;
},
"enumerate": function() {
var result = [];
console.log("Proxy.enumerate()");
for (var name in o) { result.push(name); };
return result;
}
}, Object.getPrototypeOf( o ) );
//Abaixo as operações executadas no objeto do Proxy e suas consequências
Object.getOwnPropertyDescriptor(p,"teste"); //Proxy.getOwnPropertyDescriptor(teste)
Object.getOwnPropertyNames(p); //Proxy.getOwnPropertyNames()
Object.defineProperty(p,"teste",{writable:true,configurable:true}); //Proxy.defineProperty(teste,{"configurable":true,"enumerable":false,"writable":true})
delete p.teste; //Proxy.delete(teste)
"teste" in p; //Proxy.has(teste)
p.teste; //Proxy.get(teste)
p.teste = { test: "Test"}; //Proxy.set(teste, {"test":"Test"})
for ( name in p ); //Proxy.enumerate()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment