Advertisement
Guest User

Untitled

a guest
Jul 21st, 2017
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.73 KB | None | 0 0
  1. Object.defineProperty(this, "glob", {get: function(){return "direct access"})
  2. console.log(glob); //"direct access"
  3.  
  4. Object.defineProperty(Object.prototype, "define", {
  5. value: function(name, descriptor){
  6. Object.defineProperty(this, name, descriptor);
  7. }
  8. };
  9. define("REALLYglobal", {get: function(){ return "above window context"; }});
  10.  
  11. var point3d = function(){
  12. var x, y, z;
  13. return {
  14. get: function(){ return [x, y, z]; },
  15. set: function(vals){ x=vals[0]; y=vals[1]; z=vals[2]; }
  16. };
  17. };
  18.  
  19. var x = {myname: "intercept valueOf and :set: to overload math ops!", index: 5};
  20. x++; //x is now NaN if you don't implement a setter somehow
  21.  
  22. var target = (function(){
  23. var handler = Proxy.create(Proxy.create({
  24. get: function(r, trap){
  25. return function(name,val,c,d){
  26. if (trap === 'get' || trap === 'set') {
  27. name = val;
  28. val = c;
  29. }
  30. console.log('"'+trap + '" invoked on property "'+name+'" ' + (val?' with value "'+val+'"':''));
  31. switch (trap) {
  32. case 'get': return target[name];
  33. case 'set': return target[name] = val;
  34. case 'has': return name in target;
  35. case 'delete': return delete target;
  36. case 'keys': return Object.keys(target);
  37. case 'hasOwn': return Object.hasOwnProperty.call(target, name);
  38. case 'getPropertyDescriptor':
  39. case 'getOwnPropertyDescriptor': return Object.getOwnPropertyDescriptor(target, name);
  40. case 'getPropertyNames':
  41. case 'getOwnPropertyNames': return Object.getOwnPropertyNames(target);
  42. case 'defineProperty': return Object.defineProperty(target, name, val);
  43. }
  44. }
  45. }
  46. }))
  47.  
  48. var target = {
  49. x: 'stuff',
  50. f: { works: 'sure did' },
  51. z: ['overwritten?']
  52. };
  53.  
  54.  
  55. with (handler){
  56. var z = 'yes/no';
  57. if (x) {
  58. //x
  59. } else {
  60. x = true;
  61. }
  62. console.log(f.works);
  63. if (f.works) {
  64. f.works = true;
  65. delete f;
  66. }
  67.  
  68. }
  69. return target
  70. })()
  71. // "getPropertyDescriptor" invoked on property "z"
  72. // "getPropertyDescriptor" invoked on property "z"
  73. // "getPropertyDescriptor" invoked on property "x"
  74. // "get" invoked on property "x"
  75. // "getPropertyDescriptor" invoked on property "console"
  76. // "getPropertyDescriptor" invoked on property "f"
  77. // "get" invoked on property "f"
  78. // sure did
  79. // "getPropertyDescriptor" invoked on property "f"
  80. // "get" invoked on property "f"
  81. // "getPropertyDescriptor" invoked on property "f"
  82. // "get" invoked on property "f"
  83. // "getPropertyDescriptor" invoked on property "f"
  84.  
  85. target: { x: 'Stuff', f: { works: true }, z: ['overwritten?'] }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement