Guest User

Untitled

a guest
Apr 25th, 2018
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.80 KB | None | 0 0
  1. Object.prototype.toSafeProxy = function() {
  2. const getter = (target, name, receiver) => {
  3. const value = target[name]
  4.  
  5. if (value == null) {
  6. return nullProxy(value)
  7. } else if (typeof value === 'object') {
  8. return value.toSafeProxy()
  9. } else if (typeof value === 'function') {
  10. return value
  11. } else {
  12. return primitiveProxy(value)
  13. }
  14. }
  15.  
  16. const nullProxy = (value) => {
  17. return new Proxy({
  18. value: () => value,
  19. fallbackTo: fallback => fallback,
  20. flatMap: () => value
  21. }, { get: getter })
  22. }
  23.  
  24. const primitiveProxy = (value) => {
  25. return new Proxy({
  26. value: () => value,
  27. fallbackTo: () => value,
  28. flatMap: map => map(value)
  29. }, { get: getter })
  30. }
  31.  
  32. return new Proxy(Object.assign({}, this, {
  33. fallbackTo: () => this,
  34. flatMap: map => map(this)
  35. }), {
  36. get: getter
  37. })
  38. }
Add Comment
Please, Sign In to add comment