Guest User

Untitled

a guest
Apr 25th, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.48 KB | None | 0 0
  1. // Class definition
  2. class AppDescription {
  3. constructor(obj = {}) {
  4. if ((Object.keys(obj).length)) {
  5. this.name = obj.name !== undefined ? obj.name : 'Default app name';
  6. this.version = obj.version !== undefined ? obj.version : 'Default version';
  7. } else {
  8. console.warn('Please provide a valid configuration object...');
  9. }
  10. }
  11. }
  12.  
  13. let conf = {
  14. name: 'Amazing app',
  15. version: '1.0.0'
  16. };
  17.  
  18. // Creating an 'app' instance based on class 'AppDescription'
  19. let app = Reflect.construct(AppDescription, [conf]);
  20.  
  21. // Defining a proxy handler for our app
  22. let appProxyHandler = {
  23. get: (target, name) => {
  24. if (Reflect.has(target, name)) {
  25. return Reflect.get(target, name);
  26. } else {
  27. console.warn(`Property "${name}" does not exist.`);
  28. }
  29. },
  30.  
  31. set: (target, property, value) => {
  32. switch(Object.prototype.toString.call(value)) {
  33. case ('[object Array]'):
  34. if (value.length >=2) {
  35. Reflect.set(target, property, value);
  36. } else {
  37. console.warn(`Arrays min. length: 2`);
  38. }
  39. break;
  40.  
  41. case ('[object Object]'):
  42. break;
  43. if (value.length >=3) {
  44. Reflect.set(target, property, value);
  45. } else {
  46. console.warn(`Objects min. length: 3`);
  47. }
  48.  
  49.  
  50. case ('[object String]'):
  51. if (value.length >= 4) {
  52. Reflect.set(target, property, value);
  53. } else {
  54. console.warn(`Property "${property}" should be at least 4 characters long.`)
  55. }
  56. break;
  57.  
  58. default:
  59. console.warn('Please provide a correct value type.');
  60. }
  61. },
  62.  
  63. defineProperty: (target, property, value) => {
  64. //Pro tip: define some checks in this trap as well!
  65. Reflect.set(target, property, value);
  66. }
  67. }
  68.  
  69. // Creating our app proxy + using the proxy handler
  70. let appDescProxy = new Proxy(app, appProxyHandler);
  71.  
  72. //Doing some tests:
  73.  
  74. // Will fail
  75. Reflect.set(appDescProxy, 'name', 'Foo');
  76. Reflect.get(appDescProxy, 'authors');
  77.  
  78. // Will work
  79. Reflect.set(appDescProxy, 'name', 'Super App');
  80. Reflect.get(appDescProxy, 'name');
  81. Reflect.defineProperty(appDescProxy, 'authors', {
  82. value: ['Erik J.', 'John Doe'],
  83. writable: true,
  84. configurable: true
  85. });
  86. Reflect.get(appDescProxy, 'authors');
Add Comment
Please, Sign In to add comment