在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对象!

随机推荐

  1. python和c#通用一致的des加密采用CBC和PKCS7

    在python下可以下载pydes 下载地址为 http://pydes.sourceforge.net/ 在c#下实现des加密较为简单,如下: using System; using System ...

  2. WindowManager.LayoutParams全解

    WindowManager是Android中一个重要的服务(Service ).WindowManager Service 是全局的,是唯一的.它将用户的操作,翻译成为指令,发送给呈现在界面上的各个W ...

  3. VBA验证工作表是否存在

    使用VBA验证工作表是否存在 ============================================================= 代码区域 ================== ...

  4. lspci查看硬件信息时提示找不到命令

    系统环境:centos 6.3 X64 错误信息:[root@localhost ~]# lspci-bash: lspci: command not found 问题原因:这是因为没有安装pciut ...

  5. 使用Python爬虫爬取网络美女图片

    代码地址如下:http://www.demodashi.com/demo/13500.html 准备工作 安装python3.6 略 安装requests库(用于请求静态页面) pip install ...

  6. 小强升职记(GTD)脑图

  7. Solr 缓存配置

    http://www.blogjava.net/xiaohuzi2008/archive/2012/12/03/392376.html

  8. Asp.Net MVC中递归死循环问题

    在写代码的时候,很欢乐地发现报错了. An unhandled exception of type 'System.StackOverflowException' occurred in mscorl ...

  9. Mysql删除重复数据保留最小的id

    在网上查找删除重复数据保留id最小的数据,方法如下: DELETE FROM people WHERE peopleName IN ( SELECT peopleName FROM people GR ...

  10. mongodb - mongotop

    mongodb - mongotop # ./mongotop 2016-03-12T16:37:32.141+0800 connected to: 127.0.0.1 ns total read w ...