`
wyf
  • 浏览: 424803 次
  • 性别: Icon_minigender_1
  • 来自: 唐山
社区版块
存档分类
最新评论

Js 观察者模式

    博客分类:
  • 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."); 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics