Guest User

Untitled

a guest
Nov 12th, 2018
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.53 KB | None | 0 0
  1. // 1. MessageChannel
  2. (async () => {
  3.  
  4. const structuredCloneAsync = value =>
  5. new Promise(resolve => {
  6. const { port1: inPort, port2: outPort } = new MessageChannel();
  7. outPort.onmessage = ({data: {value}}) => resolve(value);
  8. inPort.postMessage({value});
  9. });
  10.  
  11.  
  12. const original = { date: new Date(), number: Math.random() };
  13. original.self = original;
  14.  
  15. console.time('Clone MessageChannel')
  16. const clone = await structuredCloneAsync(original);
  17. console.timeEnd('Clone MessageChannel')
  18.  
  19. // different objects:
  20. console.assert(original !== clone);
  21. console.assert(original.date !== clone.date);
  22.  
  23. // cyclical:
  24. console.assert(original.self === original);
  25. console.assert(clone.self === clone);
  26.  
  27. // equivalent values:
  28. console.assert(original.number === clone.number);
  29. console.assert(Number(original.date) === Number(clone.date));
  30.  
  31. console.log("Assertions complete - MessageChannel.");
  32. })();
  33.  
  34. // 2. history
  35. (() => {
  36.  
  37. const structuredClone = obj => {
  38. const oldState = history.state;
  39. history.replaceState(obj, null);
  40. const clonedObj = history.state;
  41. history.replaceState(oldState, null);
  42. return clonedObj;
  43. };
  44.  
  45. const original = { date: new Date(), number: Math.random() };
  46. original.self = original;
  47.  
  48. console.time('Clone history')
  49. const clone = structuredClone(original);
  50. console.timeEnd('Clone history');
  51.  
  52.  
  53. // different objects:
  54. console.assert(original !== clone);
  55. console.assert(original.date !== clone.date);
  56.  
  57. // cyclical:
  58. console.assert(original.self === original);
  59. console.assert(clone.self === clone);
  60.  
  61. // equivalent values:
  62. console.assert(original.number === clone.number);
  63. console.assert(Number(original.date) === Number(clone.date));
  64.  
  65. console.log("Assertions complete - history.");
  66. })();
  67.  
  68. // 3. Notification
  69. (() => {
  70.  
  71. const structuredClone = obj => {
  72. const n = new Notification('', {data: obj, silent: true});
  73. n.onshow = n.close;
  74. return n.data;
  75. };
  76.  
  77. const original = { date: new Date(), number: Math.random() };
  78. original.self = original;
  79.  
  80. console.time('Clone Notification')
  81. const clone = structuredClone(original);
  82. console.timeEnd('Clone Notification');
  83.  
  84.  
  85. // different objects:
  86. console.assert(original !== clone);
  87. console.assert(original.date !== clone.date);
  88.  
  89. // cyclical:
  90. console.assert(original.self === original);
  91. console.assert(clone.self === clone);
  92.  
  93. // equivalent values:
  94. console.assert(original.number === clone.number);
  95. console.assert(Number(original.date) === Number(clone.date));
  96.  
  97. console.log("Assertions complete - Notification.");
  98. })();
Add Comment
Please, Sign In to add comment