function EventTarget () {
this.handles = {}
}
EventTarget.prototype = {
constructor: EventTarget,
addHandler: function (type, handle) {
if (typeof this.handles[type] === 'undefined') {
this.handles[type] = []
}
this.handles[type].push(handle)
},
fire: function (event) {
if (!event.target){
event.target = this
}
if (this.handles[event.type] instanceof Array) {
let handles = this.handles[event.type]
for (let i = 0; i < handles.length; i++) {
handles[i](event)
}
}
},
removeHandler: function (type, handle) {
if (this.handles[type] instanceof Array) {
let handles = this.handles[type]
for (var i = 0; i < handles.length; i++) {
if (handles[i] ===handle) {
break
}
}
handles.splice(i,1)
}
}
}
function handleMessage (event) {
alert('Message received:', event.message)
}
var target = new EventTarget()
targrt.addHandler('message', handleMessage)
target.fire({ type: "message", message: "Hello world!"})
target.removeHandler('message', handleMessage)
target.fire({ type: "message", message: "Hello world!"});
function Person(name, age){ EventTarget.call(this); this.name = name; this.age = age;
}
inheritPrototype(Person,EventTarget);
Person.prototype.say = function(message){
this.fire({type: "message", message: message});
};
function handleMessage(event){
alert(event.target.name + " says: " + event.message);
}
var person = new Person("Nicholas", 29);
person.addHandler("message", handleMessage);
person.say("Hi there.");