Guest User

Untitled

a guest
Jul 15th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.30 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta name="description" content="[iterator & observer]">
  5. <meta charset="utf-8">
  6. <meta name="viewport" content="width=device-width">
  7. <title>JS Bin</title>
  8. </head>
  9. <body>
  10.  
  11. <script id="jsbin-javascript">
  12. var Subject = function() {
  13. var self = this;
  14. self.observers = [];
  15.  
  16. return {
  17. subscribe: function(observer) {
  18. self.observers.push(observer);
  19. },
  20. unsubscribe: function(observer) {
  21. var index = self.observers.indexOf(observer);
  22. if (index > -1) {
  23. self.observers.splice(index, 1);
  24. }
  25. },
  26. notify: function(observer) {
  27. var index = self.observers.indexOf(observer);
  28. if (index > -1) {
  29. self.observers[index].notify(index);
  30. }
  31. },
  32. notifyAll: function() {
  33. for (var i = 0; i < self.observers.length; i++) {
  34. self.observers[i].notify(i);
  35. }
  36. },
  37. notifyIterator: function() {
  38. var i = 0;
  39. return {
  40. next: function(){
  41. return i < self.observers.length ?
  42. {value: self.observers[i++].notify(i), done: false}:
  43. {done: true};
  44. }
  45. };
  46. }
  47. };
  48. };
  49.  
  50. var Observer = function() {
  51. return {
  52. notify: function(index) {
  53. console.log("Observer " + (index) + " is notified!");
  54. }
  55. }
  56. }
  57.  
  58. var subject = new Subject();
  59.  
  60. var observer1 = new Observer();
  61. var observer2 = new Observer();
  62. var observer3 = new Observer();
  63. var observer4 = new Observer();
  64.  
  65. subject.subscribe(observer1);
  66. subject.subscribe(observer2);
  67. subject.subscribe(observer3);
  68. subject.subscribe(observer4);
  69.  
  70.  
  71. var it = subject.notifyIterator();
  72. it.next().value;
  73. it.next().value;
  74. it.next().value;
  75. it.next().value;
  76. console.log(it.next().done);
  77. </script>
  78.  
  79.  
  80.  
  81. <script id="jsbin-source-javascript" type="text/javascript">var Subject = function() {
  82. var self = this;
  83. self.observers = [];
  84.  
  85. return {
  86. subscribe: function(observer) {
  87. self.observers.push(observer);
  88. },
  89. unsubscribe: function(observer) {
  90. var index = self.observers.indexOf(observer);
  91. if (index > -1) {
  92. self.observers.splice(index, 1);
  93. }
  94. },
  95. notify: function(observer) {
  96. var index = self.observers.indexOf(observer);
  97. if (index > -1) {
  98. self.observers[index].notify(index);
  99. }
  100. },
  101. notifyAll: function() {
  102. for (var i = 0; i < self.observers.length; i++) {
  103. self.observers[i].notify(i);
  104. }
  105. },
  106. notifyIterator: function() {
  107. var i = 0;
  108. return {
  109. next: function(){
  110. return i < self.observers.length ?
  111. {value: self.observers[i++].notify(i), done: false}:
  112. {done: true};
  113. }
  114. };
  115. }
  116. };
  117. };
  118.  
  119. var Observer = function() {
  120. return {
  121. notify: function(index) {
  122. console.log("Observer " + (index) + " is notified!");
  123. }
  124. }
  125. }
  126.  
  127. var subject = new Subject();
  128.  
  129. var observer1 = new Observer();
  130. var observer2 = new Observer();
  131. var observer3 = new Observer();
  132. var observer4 = new Observer();
  133.  
  134. subject.subscribe(observer1);
  135. subject.subscribe(observer2);
  136. subject.subscribe(observer3);
  137. subject.subscribe(observer4);
  138.  
  139.  
  140. var it = subject.notifyIterator();
  141. it.next().value;
  142. it.next().value;
  143. it.next().value;
  144. it.next().value;
  145. console.log(it.next().done);
  146. </script></body>
  147. </html>
Add Comment
Please, Sign In to add comment