基于JavaScript弱类型的特点,我们可以通过重构对象方法来实现绑定事件的机制(当调用某个对象方法时总是触发调用我们自定义的方法):
/** * 定义事件绑定方法 * obj:要绑定事件的对象 * target:要绑定事件的对象方法名 * handler:要绑定的事件 * toTop:是否优先执行事件 */ function addEvent(obj, target, handler, toTop) { // 判断参数是否有效 if (obj && target && typeof (handler) == "function") { // 获取对象obj中名称为target的成员 var fun = obj[target]; // 重构对象obj的target成员 obj[target] = function () { // 判断要绑定的方法是否优先执行 if (toTop) { // 调用要绑定的方法 var result = handler.apply(obj, arguments); // 返回false则终止事件冒泡 if (result !== false) { // 判断对象obj的target成员是否为方法 if (typeof (fun) == "function") { // 调用对象obj的原始target方法 result = fun.apply(obj, arguments); } } return result; } else { // 定义返回结果 var result = undefined; // 判断对象obj的target成员是否为方法 if (typeof (fun) == "function") { // 调用对象obj的原始target方法 result = fun.apply(obj, arguments); } // 调用要绑定的方法,返回false则终止事件冒泡 if (handler.apply(obj, arguments) === false) { return false; } else { // 返回原始结果 return result; } } } } } // 为window对象的encodeURIComponent方法绑定事件 addEvent(window, "encodeURIComponent", function (url) { alert(url); }, true); // 调用方法触发事件 encodeURIComponent("index.html");