Proxies in ECMAScript 6.0

13
© 2015 Eyal Vardi. All rights reserved. Tel: 054-5-767-300, Email: [email protected]

Transcript of Proxies in ECMAScript 6.0

Page 1: Proxies in ECMAScript 6.0

© 2015 Eyal Vardi. All rights reserved. Tel: 054-5-767-300, Email: [email protected]

Page 2: Proxies in ECMAScript 6.0

© 2015 Eyal Vardi. All rights reserved. Tel: 054-5-767-300, Email: [email protected]

.property)

=)

in)

new Proxy(target, handler);

Target

Handler

operations

Page 3: Proxies in ECMAScript 6.0

© 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' ]

Page 4: Proxies in ECMAScript 6.0

© 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

Page 5: Proxies in ECMAScript 6.0

© 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

Page 6: Proxies in ECMAScript 6.0

© 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

}

Page 7: Proxies in ECMAScript 6.0

© 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

}

Page 8: Proxies in ECMAScript 6.0

© 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, = , .

Page 9: Proxies in ECMAScript 6.0

© 2015 Eyal Vardi. All rights reserved. Tel: 054-5-767-300, Email: [email protected]

Page 10: Proxies in ECMAScript 6.0

© 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

Page 11: Proxies in ECMAScript 6.0

© 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

Page 12: Proxies in ECMAScript 6.0

© 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

Page 13: Proxies in ECMAScript 6.0

© 2015 Eyal Vardi. All rights reserved. Tel: 054-5-767-300, Email: [email protected]

eyalvardi.wordpress.com