javascript Observer模式

<script>
Array.prototype.append = function(obj, nodup) {
	if(!(nodup && this.contains(obj))) {
		this[this.length] = obj;
	}
}

Array.prototype.contains = function(obj) {
	return (this.indexOf(obj)>=0);
}

Array.prototype.indexOf = function(obj) {
	var result = -1;
	for(var i=0; i<this.length; i++) {
		if(this[i]==obj) {
			result = i;
			break;
		}
	}
	return result;
}

Array.prototype.clear = function() {
	this.length = 0;
}

Array.prototype.insertAt = function(index, obj) {
	this.splice(index, 0, obj);
}

Array.prototype.removeAt = function(index) {
	this.splice(index, 1);
}

Array.prototype.remove = function(obj) {
	var index = this.indexOf(obj);
	if(index>=0)
		this.removeAt(index);
}
</script>
<script>
Router = function(el, e) {
	this.lsnrs = [];
	el.router = this;
	el[e] = Router.callback;
}

Router.prototype.addListener = function(lsnr, argArray) {
	lsnr.argArray = argArray;
	this.lsnrs.append(lsnr, true);
}

Router.prototype.removeListener = function(lsnr) {
	this.lsnrs.remove(lsnr);
}

Router.prototype.notify = function(e) {
	for(var i=0; i<this.lsnrs.length; i++)
		this.lsnrs[i].apply(e.srcElement, this.lsnrs[i].argArray);
}

Router.callback = function() {
	var router = this.router;
	router.notify(window.event);
}

function test1(a) {
	alert(a)
}
function test2(a,b) {
	alert(a+b)
}
function test3(a,b,c) {
	alert(a+b+c)
}
window.onload = function() {
	var el = document.getElementById("bt");
	var router = new Router(el, "onclick")
	router.addListener(test1,[1]);
	router.addListener(test2,[1,2]);
	router.addListener(test3,[1,2,3]);
	router.removeListener(test2);
}
</script>
<input id="bt" type="button" value="button" />

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值