首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

事件中的this,该如何解决

2012-04-13 
事件中的this代码1JScript codescript typetext/javascriptfunction a(){alert(this)}/scripta h

事件中的this
代码1

JScript code
<script type="text/javascript">        function a()    {        alert(this);    }</script><a href="#" onclick='a();'>a</a>


代码2
JScript code
<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>


觉得很奇怪的。为什么代码1运行的时候是object。代码2运行的时候是这个标签的href
this为什么指向的对象不一样呢?


[解决办法]
第一个指的方法。。第二个指的是b
[解决办法]
代码1中的this指向的是类型为function的object
代码2中的this指向hyper link
[解决办法]
HTML code
//第一个类似于(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不一样,自己体会

[解决办法]
HTML code
<script type="text/javascript">        function a()    {        var b;        alert(this);    }</script><a href="#" onclick='a();'>a</a> 

热点排行