日期:2014-05-16 浏览次数:20407 次
<script type="text/javascript"> function a() { alert(this); } </script> <a href="#" onclick='a();'>a</a>
<script type="text/javascript"> function a() { var b; b=document.getElementsByTagName('a')[0]; b.onmouseover=function(){alert(this);} } window.onload=a </script> <a href="#" onclick='a();'>a</a>
//第一个类似于(obj表示a标签) obj.onclick=function(){ a(); //function a 的作用域为window }; //若要得到预期结果,可以这样调用,可以google call的用法 <a href="#" onclick='a.call(this);'>a</a> //也可以直接传入a标签 <script type="text/javascript"> function a(obj) { alert(obj); } </script> <a href="#" onclick='a(this);'>a</a>
------解决方案--------------------
第一种方法采用在事件函数中调用函数的方式,这种情况下this的指代根据上下文确定,第二种方法是把函数作为了对象的一个方法,这时this指代拥有方法的对象
要弄清楚this在各种情况下的指代对象,不真真正正写上几个控件是不得行的
其实说穿了也简单:
方法中的this指代的就是方法的拥有者,全局函数中的this指代window,局部函数中的this要看上下文,看其归属的对象
但是要记住,this只有在函数调用时才能确定其中的this的指代,比如同一个函数作为全局函数被调用和作为方法被调用其this代表的东西就不一样。
var obj=new Object();
function test()
{
alert(this);
}
obj.test=test;
test();
obj.test();//都是这个函数,但是this不一样,自己体会
------解决方案--------------------
<script type="text/javascript"> function a() { var b; alert(this); } </script> <a href="#" onclick='a();'>a</a>