林秀栋的技术博客

设计模式(三十) 装饰者模式

//在不改变原有对象的基础上,通过包装扩展使其能增加更多方法和属性

var decorator = function(input, fn){
	var input = document.getElementById(input);
	//若事件源已绑定事件
	if(typeof input.onclick === 'function'){
		//缓存原有事件的回调函数
		var oldClickFn = input.onclick;
		//为事件源定义新事件
		input.onclick = function(){
			oldClickFn();
			fn();
		}
	}else{
		input.onclick = fn;
	}
	//...
}
//给id为aa的元素添加新的事件
decorator('aa', function(){
	//...
})