Skip to content

Instantly share code, notes, and snippets.

@kotaroito
Last active August 29, 2015 14:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kotaroito/d14bfbfefc8837476ab6 to your computer and use it in GitHub Desktop.
Save kotaroito/d14bfbfefc8837476ab6 to your computer and use it in GitHub Desktop.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS Bin</title>
</head>
<body>
<div>
<button id="myBtn">click</button>
</div>
</body>
</html>
var Subject = (function(){
var pool = {};
return function(name) {
if (!pool[name]) {
var subject = Object.create(Subject.prototype);
subject.name = name;
subject.observers = [];
pool[name] = subject;
}
return pool[name];
};
})();
Subject.prototype = {
addObserver: function(observer) {
this.observers.push(observer);
},
removeObserver: function(observer) {
var index = this.observers.indexOf(observer);
if (index > -1)
this.observers.splice(index, 1);
},
notify: function(context) {
for (var i = 0; i < this.observers.length; i++) {
this.observers[i].update(context);
}
},
};
var Observer = function() {
return Object.create(Observer.prototype);
};
Observer.prototype.update = function(){
};
Observer.Count = function(name) {
var o = Object.create(Observer.Count.prototype);
o.cnt = 0;
return o;
};
Observer.Count.prototype.update = function(context) {
console.log(++this.cnt);
};
(function() {
var subject = Subject("test");
subject.addObserver(Observer("o1"));
subject.addObserver(Observer.Count("o2"));
var btn = document.getElementById('myBtn');
btn.addEventListener("click", function() {
subject.notify();
}, false);
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment