自定义事件:js的自定义事件是用的观察者的设计模式,有主体和观察者两部分组成,主体对象不在乎是否有观察者依然可以运行,观察者对主体动作观察,当主体发布事件后,观察者捕获事件后运行代码(自我感觉,是主体通知注册的观察者,告诉观察者事件的发生)。下面以一个简单的小例子来创建一个自定义事件
<script>
(function(w){
function MyEventTest(){ //主体对象
this.mapHandlers = {};
this.name = "";
}
//在原型链上创建,避免每次new再次创建
MyEventTest.prototype = {
constructor : MyEventTest,
addListener : function(type,handler){
this.mapHandlers[type] = handler;
},
fire : function(event){
if(!event.target){
event.target = this; //把主体对象绑定到event.target
}
this.mapHandlers[event.type](event);
},
setName : function(value){
if(typeof value == 'string'){
this.name = value;
if(this.mapHandlers['afterSetName']){
this.fire({type:'afterSetName',name:value});
}
}
}
};
//绑定到window
w.jQuery = w.$ = MyEventTest;
})(window);
var target = new jQuery();
//注册监听事件
target.addListener('afterSetName',function(event){
alert(event.name);
});
target.setName("小强");//setName会触发注册的事件
</script>