一个关于this指向而引发的血案。。。
在测试this指向的程序中,我写错了id对象,结果呢,居然也有效果,这真是超于我意料之外太多了,我以为自己写错了,结果一样可以用。。。。。。。
<div id="bbb">show</div>
<script>
// window.onload = function(){
// //
// var s = document.getElementById('bbb');
// s.onclick = showThis;//this == div#show
// bbb.onclick = function(){
// console.log(showThis);//返回的是定义showThis的内容
// showThis();//this = window
// }
// // showThis();//this = window
// }
// function showThis(){
// console.log(this);
// }
window.onload = function(){
//直接使用id的方式调用方法,ie7,8,9,10,11,都支持,只不过ie7都返回object,其他都是[object Window],[object HTMLDivElement]bbb
var s = document.getElementById('bbb');
s.onclick = showThis;//this == div#show
bbb.onclick = function(){
showThis();//this = window
alert(this+'bbb')
}
// showThis();//this = window
}
function showThis(){
alert(this);
}
</script>
做一点总结: window.onload = function(){
//直接使用id的方式调用方法,ie7,8,9,10,11,都支持,只不过ie7都返回object,其他都是[object Window],[object HTMLDivElement]bbb
var s = document.getElementById('bbb');
console.log(s[onclick])
// s.onclick = showThis;//this == div#show
s.onclick = showThis;//实际上是把showThis的内容赋值给s.onclick,在未赋值前,s[onclick]为undifined
s.onclick = showThis();//实际上和showThis()一样,也没有返回值,这样的方式其实在onclick为赋值前,showThis已经执行了;
s.onclick = function(){//也是赋值,但是因为showThis是在外面定义的,所以showThis的this还是window
showThis()
}
s.onclick = function(){//相当于s.onclick = showThis;也是赋值
alert(this)
}
// s.onclick = showThis();
// bbb.onclick = function(){
// showThis();//this = window
// alert(this+'bbb')
// }
// showThis();//this = window
}
function showThis(e){
alert(this);
}