© 2015 Eyal Vardi. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
© 2015 Eyal Vardi. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
.property)
=)
in)
new Proxy(target, handler);
Target
Handler
operations
© 2015 Eyal Vardi. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
let target = {};
let handler = {
get(target, propKey, receiver) {
console.log('get ' + propKey);
return 123;
},
ownKeys(target) {
console.log('ownKeys');
return ['hello', 'world'];
}
};
let proxy = new Proxy(target, handler);
> proxy.fooget foo123
> Object.keys(proxy)ownKeys[ 'hello', 'world' ]
© 2015 Eyal Vardi. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
var p = new Proxy({}, {
set: function (target, prop, value, receiver) {
console.log("called: " + prop + " = " + value);
return true;
}
});
p.a = 10; // "called: a = 10
© 2015 Eyal Vardi. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
var target = {};
var p = new Proxy( target , {} );
p.a = 37; // operation forwarded to the proxy
console.log(target.a); // 37. The operation has been
properly forwarded
© 2015 Eyal Vardi. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
let handler = {
deleteProperty(target, propKey) {
console.log('DELETE ' + propKey);
return delete target[propKey];
},
has(target, propKey) {
console.log('HAS ' + propKey);
return propKey in target;
},
// Other traps: similar
}
© 2015 Eyal Vardi. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
let handler = {
deleteProperty(target, propKey) {
console.log('DELETE ' + propKey);
return Reflect.deleteProperty(target, propKey);
},
has(target, propKey) {
console.log('HAS ' + propKey);
return Reflect.has(target, propKey);
},
// Other traps: similar
}
© 2015 Eyal Vardi. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
let handler = new Proxy({}, {get(target, trapName, receiver) {
// Return the handler method named trapNamereturn function (...args) {
// Slice away target object in args[0]console.log(trapName.toUpperCase()+' '+args.slice(1));// Forward the operationreturn Reflect[trapName](...args);
}}
});let p = new Proxy( {} , handler );
Target
Handler
operations
Handler
getin, delete, = , .
© 2015 Eyal Vardi. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
© 2015 Eyal Vardi. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
let target = {}; // Start with an empty object
let handler = {}; // Don’t intercept anything
let {proxy, revoke} = Proxy.revocable(target, handler);
proxy.foo = 123;
console.log( proxy.foo ); // 123
revoke();
console.log( proxy.foo ); // TypeError: Revoked
© 2015 Eyal Vardi. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
let proto = new Proxy({}, {
get(target, propertyKey, receiver) {
console.log('GET '+propertyKey);
return target[propertyKey];
}
});
let obj = Object.create( proto );
obj.bla; // Output: GET bla
© 2015 Eyal Vardi. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
http://www.2ality.com/
Understanding ECMAScript 6
http://ecmascript6.org/
A Few New Things Coming To JavaScript
HARMONY OF DREAMS COME TRUE
Harmony specification_drafts
© 2015 Eyal Vardi. All rights reserved. Tel: 054-5-767-300, Email: [email protected]
eyalvardi.wordpress.com
Top Related