js之this,请问你是谁



在js中this不像其它语言那样容易理解,它有时候指window对象,有时候又是其它对象,那么this,你到底是谁呢?
要分析this就要先理解js中的方法定义,因为this一般都是在方法中使用的,而且方法在js中的地位又很特殊。


在js中定义的方法一定不会单独存在,它必定属于某个对象,所以this就是代表方法属于的那个对象。

1、一般方法

 

function test() { 
    alert(this==window); 
} 
test();

像这种普通的方法定义,方法并没有属于某个对象呀?其实js里有个全局的window对象,没错,这个方法就是定义在window对象下了,所以里面的this肯定就是window。

2、方法,还是方法

复制代码
function test1(){

    function test2(){ 
        alert(this==window) 
    } 
    test2() 
} 
test1();
复制代码

这种情况呢,test2没有明显的属于某个对象,那它就...对,那它就属于window对象,所以里面的this就是指window对象。

3、对象的方法

var o={ 
    test:function(){ 
        alert(this==window); 
    }    
} 
o.test(); 

这种情况就很容易理解了,test方法属于o对象,this当然是指o对象了。

4、再见对象

复制代码
function Persion () { 
    this.name="mu"; 
}

Persion.prototype.show=function(){ 
    alert(this.name); 
}

var p=new Persion();

p.show();
复制代码

再来看Persion方法,这里的Persion是构造函数,所以this就是指new的时候js创建的匿名对象,这个匿名对象又赋给了p对象,于是this就是指p对象。

5、别忘了事件

var btn=document.getElementById("btn"); 
btn.onclick=function(){ 
    alert(this); 
} 

onclick方法属于btn对象,所以this指向btn

复制代码
btn.addEventListener("click",function(){ 
    alert(this); 
})

btn.attachEvent("onclick",function(){ 
    alert(this); 
});
复制代码

这里比较特殊了,前者是W3C标准的,this指向btn,后者是ie专有的,this指定window,这里只能死记了。


 

最后总结一句话:this代表谁,就看方法属于谁,ie事件绑定指window对象!





感谢http://www.cnblogs.com/mu-mu/p/4281934.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值