function addEvent(obj,type,fn){ if(obj.addEventListener){ obj.addEventListener(type,fn,false); }else if(obj.attachEvent){ obj.attachEvent('on'+type,function(){ fn.call(this); }); } } function removeEvent(obj,type,fn){ if(obj.removeEventListener){ obj.removeEventListener(type,fn,false); }else if(obj.detachEvent){ obj.detachEvent('on'+type,fn); } } function preDef(evt){ var e = evt || window.event; if(e.preventDefault){ e.preventDefault(); }else{ e.returnValue = false; } } //跨浏览器获取目标对象 function getTarget(evt){ if(evt.target){ return evt.target; }else if(window.event.srcElement){ return window.event.srcElement; } } //跨浏览器获取字符编码 function getCharCode(evt){ var e = evt || window.event; if(typeof e.charCode == 'number'){ return e.charCode; }else{ return e.keyCode; } }
//inherit()返回了一个继承自原型对象p的属性的新对象 //这里使用ECMAScript 5 中的Object.create()函数(如果存在的话) //如果不存在Object.create(),则退化使用其他方法; function inherit(p){ if(p == null) throw TypeError(); //p是一个对象,但不能是null if(Object.create){ //如果Object.create()存在 return Object.create(p); //直接使用它 } var t = typeof p; //否则进行进一步检测 if(t !== 'object' && t != 'function') throw TypeError(); function f(){}; //定义一个空构造函数 f.prototype = p; //将其原型属性设置为p return new f(); }