Js 观察者模式

function EventTarget(){
 this.handlers = {};
}
EventTarget.prototype = {
 constructor: EventTarget,
 addHandler: function(type, handler){
 if (typeof this.handlers[type] == "undefined"){
 this.handlers[type] = [];
 }
 this.handlers[type].push(handler);
 },
 fire: function(event){
 if (!event.target){
 event.target = this;
 }
 if (this.handlers[event.type] instanceof Array){
 var handlers = this.handlers[event.type];
 for (var i=0, len=handlers.length; i < len; i++){
 handlers[i](event);
 }
 }
 },
 removeHandler: function(type, handler){
 if (this.handlers[type] instanceof Array){
 var handlers = this.handlers[type];
 for (var i=0, len=handlers.length; i < len; i++){
 if (handlers[i] === handler){
 break;
 }
 }
 handlers.splice(i, 1); 
 }
 }
}; 

 

function handleMessage(event){
 alert("Message received: " + event.message);
}
//创建一个新对象
var target = new EventTarget();
//添加一个事件处理程序
target.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 inheritPrototype(subType, superType){
 var prototype = Object.create(superType.prototype); //创建对象
 prototype.constructor = subType; //增强对象
 subType.prototype = prototype; //指定对象
} 

 

function handleMessage(event){
 alert(event.target.name + " says: " + event.message);
}
//创建新 person
var person = new Person("Nicholas", 29);
//添加一个事件处理程序
person.addHandler("message", handleMessage);
//在该对象上调用 1 个方法,它触发消息事件
person.say("Hi there."); 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值