Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE html>
- <html>
- <head>
- <meta name="description" content="[iterator & observer]">
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width">
- <title>JS Bin</title>
- </head>
- <body>
- <script id="jsbin-javascript">
- var Subject = function() {
- var self = this;
- self.observers = [];
- return {
- subscribe: function(observer) {
- self.observers.push(observer);
- },
- unsubscribe: function(observer) {
- var index = self.observers.indexOf(observer);
- if (index > -1) {
- self.observers.splice(index, 1);
- }
- },
- notify: function(observer) {
- var index = self.observers.indexOf(observer);
- if (index > -1) {
- self.observers[index].notify(index);
- }
- },
- notifyAll: function() {
- for (var i = 0; i < self.observers.length; i++) {
- self.observers[i].notify(i);
- }
- },
- notifyIterator: function() {
- var i = 0;
- return {
- next: function(){
- return i < self.observers.length ?
- {value: self.observers[i++].notify(i), done: false}:
- {done: true};
- }
- };
- }
- };
- };
- var Observer = function() {
- return {
- notify: function(index) {
- console.log("Observer " + (index) + " is notified!");
- }
- }
- }
- var subject = new Subject();
- var observer1 = new Observer();
- var observer2 = new Observer();
- var observer3 = new Observer();
- var observer4 = new Observer();
- subject.subscribe(observer1);
- subject.subscribe(observer2);
- subject.subscribe(observer3);
- subject.subscribe(observer4);
- var it = subject.notifyIterator();
- it.next().value;
- it.next().value;
- it.next().value;
- it.next().value;
- console.log(it.next().done);
- </script>
- <script id="jsbin-source-javascript" type="text/javascript">var Subject = function() {
- var self = this;
- self.observers = [];
- return {
- subscribe: function(observer) {
- self.observers.push(observer);
- },
- unsubscribe: function(observer) {
- var index = self.observers.indexOf(observer);
- if (index > -1) {
- self.observers.splice(index, 1);
- }
- },
- notify: function(observer) {
- var index = self.observers.indexOf(observer);
- if (index > -1) {
- self.observers[index].notify(index);
- }
- },
- notifyAll: function() {
- for (var i = 0; i < self.observers.length; i++) {
- self.observers[i].notify(i);
- }
- },
- notifyIterator: function() {
- var i = 0;
- return {
- next: function(){
- return i < self.observers.length ?
- {value: self.observers[i++].notify(i), done: false}:
- {done: true};
- }
- };
- }
- };
- };
- var Observer = function() {
- return {
- notify: function(index) {
- console.log("Observer " + (index) + " is notified!");
- }
- }
- }
- var subject = new Subject();
- var observer1 = new Observer();
- var observer2 = new Observer();
- var observer3 = new Observer();
- var observer4 = new Observer();
- subject.subscribe(observer1);
- subject.subscribe(observer2);
- subject.subscribe(observer3);
- subject.subscribe(observer4);
- var it = subject.notifyIterator();
- it.next().value;
- it.next().value;
- it.next().value;
- it.next().value;
- console.log(it.next().done);
- </script></body>
- </html>
Add Comment
Please, Sign In to add comment