方法
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 对象的函数(解耦,内部调用 )