<script>
//call 函数下的一个方法,call方法第一个参数可以改变函数执行过程中的内部this的指向,call方法第二个参数开始就是原来函数的参数列表。
function fn1(a, b) {
alert(this);
alert(a + b);
}
fn1(); //window
fn1.call(null, 10, 20); //调用函数 fn1() == fn1.call()
</script>
<script>
function fn1() {
alert(this);
}
function fn2() {
alert(2);
}
//1.给一个对象绑定事件处理函数的第一种形式
//obj.onclick = fn1;
//给一个对象的同一个事件绑定多个不同的函数
//document.onclick = fn1;
//document.onclick = fn2; //会覆盖前面绑定fn1
//2.给一个元素绑定事件函数的第二种形式
/*
IE:obj.attachEvent(事件名称,事件函数);
1.没有捕获
2.事件名称有on
3.事件函数执行的顺序:标准ie ---> 正序 非标准ie---> 倒序
4.this指向window
标准:obj.addEventListener(事件名称,事件函数,是否捕获);
1.有捕获
2.事件名称没有on
3.事件执行的顺序是正序
4.this触发该事件的对象
*/
/*
document.attachEvent('onclick', function() {
fn1.call(document);
});
document.attachEvent('onclick', fn2);
*/
//是否捕获 : 默认是false false:冒泡 true:捕获
function bind(obj, evname, fn) {
if (obj.addEventListener) {
obj.addEventListener(evname, fn, false);
} else {
obj.attachEvent('on' + evname, function() {
fn.call(obj);
});
}
}
bind(document, 'click', fn1);
bind(document, 'click', fn2);
</script>
<script>
//第一种事件绑定形式的取消
document.onclick = fn1;
document.onclick = null; //取消
/*
第二种事件绑定形式的取消
IE : obj.detachEvent(事件名称,事件函数);
标准 : obj.removeEventListener(事件名称,事件函数,是否捕获);
*/
document.attachEvent('onclick', fn1);
document.attachEvent('onclick', fn2);
document.detachEvent('onclick', fn1); //取消
document.addEventListener('click', fn1, false);
document.addEventListener('click', fn1, true);
document.addEventListener('click', fn2, false);
document.removeEventListener('click', fn1, false); //取消
</script>