观察者模式和js自定义事件

事件是一种叫做观察者的设计模式,观察者模式由两类对象组成:主体和观察者。主体负责发布事件,同时观察者通过订阅这些事件来观察该主体。拿DOM来说,DOM就是主体,事件处理代码便是观察

下面是一个自定义事件,

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);
		}
	}
}
自定义事件的调用,addHandler() 添加事件,fire() 执行事件,removeHandler() 删除绑定的事件。

function handleMessage1(event) {
	console.log("111--", event.message);
}
function handleMessage2(event) {
	console.log("222--", event.message);
}
var target = new EventTarget();
// 添加事件
target.addHandler('message', handleMessage1);
target.addHandler('message', handleMessage2);
// 执行事件
target.fire({
	type: 'message',
	message: 'hello!'
})

// 删除事件
target.removeHandler('message', handleMessage1);
// 执行事件
target.fire({
	type: 'message',
	message: 'holy'
})



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值