Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Object.defineProperty(this, "glob", {get: function(){return "direct access"})
- console.log(glob); //"direct access"
- Object.defineProperty(Object.prototype, "define", {
- value: function(name, descriptor){
- Object.defineProperty(this, name, descriptor);
- }
- };
- define("REALLYglobal", {get: function(){ return "above window context"; }});
- var point3d = function(){
- var x, y, z;
- return {
- get: function(){ return [x, y, z]; },
- set: function(vals){ x=vals[0]; y=vals[1]; z=vals[2]; }
- };
- };
- var x = {myname: "intercept valueOf and :set: to overload math ops!", index: 5};
- x++; //x is now NaN if you don't implement a setter somehow
- var target = (function(){
- var handler = Proxy.create(Proxy.create({
- get: function(r, trap){
- return function(name,val,c,d){
- if (trap === 'get' || trap === 'set') {
- name = val;
- val = c;
- }
- console.log('"'+trap + '" invoked on property "'+name+'" ' + (val?' with value "'+val+'"':''));
- switch (trap) {
- case 'get': return target[name];
- case 'set': return target[name] = val;
- case 'has': return name in target;
- case 'delete': return delete target;
- case 'keys': return Object.keys(target);
- case 'hasOwn': return Object.hasOwnProperty.call(target, name);
- case 'getPropertyDescriptor':
- case 'getOwnPropertyDescriptor': return Object.getOwnPropertyDescriptor(target, name);
- case 'getPropertyNames':
- case 'getOwnPropertyNames': return Object.getOwnPropertyNames(target);
- case 'defineProperty': return Object.defineProperty(target, name, val);
- }
- }
- }
- }))
- var target = {
- x: 'stuff',
- f: { works: 'sure did' },
- z: ['overwritten?']
- };
- with (handler){
- var z = 'yes/no';
- if (x) {
- //x
- } else {
- x = true;
- }
- console.log(f.works);
- if (f.works) {
- f.works = true;
- delete f;
- }
- }
- return target
- })()
- // "getPropertyDescriptor" invoked on property "z"
- // "getPropertyDescriptor" invoked on property "z"
- // "getPropertyDescriptor" invoked on property "x"
- // "get" invoked on property "x"
- // "getPropertyDescriptor" invoked on property "console"
- // "getPropertyDescriptor" invoked on property "f"
- // "get" invoked on property "f"
- // sure did
- // "getPropertyDescriptor" invoked on property "f"
- // "get" invoked on property "f"
- // "getPropertyDescriptor" invoked on property "f"
- // "get" invoked on property "f"
- // "getPropertyDescriptor" invoked on property "f"
- target: { x: 'Stuff', f: { works: true }, z: ['overwritten?'] }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement