<button id="bt" name="bt001">click me</button> <script type="text/javascript"> var name="somebody"; var btn=document.getElementById("bt"); var co={ name:"co", say:function(){ alert("I am "+this.name); } }; //co.say(); //co //setTimeout(co.say,1000); //somebody //setInterval(co.say,1000); //somebody //setTimeout(function(){co.say()},1000); //co //setInterval(function(){co.say()},1000); //co //btn.onclick=co.say; //bt001 //btn.onclick=function(){ // co.say(); //co //} //setTimeout(function(){alert(this==window)},1000); //true //btn.onclick=function(){ //true // alert(this==btn); //} //setTimeout, setInterval, DomNode.onXXX改变的都是直接调用的函数里的this的指向 //其中,setTimeout和setInterval将直接调用的函数里的this指向window,DomNode.onXXX将this指向DomNode //使用匿名函数将处理函数封装起来,可以将处理函数由直接调用变成通过匿名函数间接调用。 //还可以通过call和apply来改变处理函数的this指向 //co.say.call(btn); //bt001 //setTimeout(function(){co.say.call(btn)},1000); //bt001 //btn.onclick=function(){ //bt001 // co.say.call(this); //} //setTimeout(function(){co.say.apply(btn)},1000); //bt001 </script>