[javascript]代码库
function addEvent(obj,type,fn){
var saved = null;
if(obj[type] != null){
saved = obj[type];
}
obj[type] = function(){
if(saved)saved();
fn.call(this);
}
}
function toBlue(){
this.className = 'blue';
alert('blue');
addEvent(this,'onclick',toRed); //将代码换成下面这行,则不能弹出hello,world
//this.onclick = toRed; //原因是这个onclick会覆盖之前的onclick事件,saved中(递归调用了本身的代码)保存了所有之前发生过的click
//颜色的变化会产生幻觉,以为只执行了一次切换颜 色,不一定是一次,而是所有onclick的次数
//addEvent方法就是将所有的click执行一遍,
}
this.className = 'red';
alert('red');
addEvent(this,'onclick',toBlue);
}
window.onload = function(){
var box = document.getElementById('box');
addEvent(box,'onclick',function(){
alert('hello,world!');
});
addEvent(box,'onclick',toBlue);
}