方法
function on(type, callback, element) {
    if (element.addEventListener) {
        element.addEventListener(type, callback, false);
    } else if (element.attachEvent) {
        element.attachEvent("on" + type, callback["__eid"] = function () {
            callback.apply(element, arguments);
        });
    } else {
        element["on" + type] = callback
    }
};
function off(type, callback, element) {
    if (element.removeEventListener) {
        element.removeEventListener(type, callback, false);
    } else if (element.detachEvent) {
        element.detachEvent("on" + type, callback["__eid"]);
    }
};
示例
var ele = document;
on('click', function () {
    console.log("指向是否等于window");
    console.log(this == window);
}, ele);
on('click', function () {
    console.log("仅输出一次");
    off('click', arguments.callee, ele);
}, ele);
function outmsg() {
    console.log("TODO");
    console.log(this);
    console.log(this == window);
}
on('click', outmsg, ele);
了解一些概念
- 变量为引用函数
 
- 不带括号的函数名是访问函数指针,非调用函数
 
- 函数名本身就是变量
 
- 函数内部属性 
arguments 的 callee 属性指向 arguments 对象的函数(解耦,内部调用 )