在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. Hibernate关系映射(注解)

    1.类级别注解 @Entity     映射实体类 @Table    映射数句库表 @Entity(name="tableName") - 必须,注解将一个类声明为一个实体bea ...

  2. Windows最强ssh客户端推荐 —— Bitvise SSH Client

    原名Tunnelier,解除它是因为为了sshFQ,没想到它既有SSH Terminal,又集成SFTP,还能FQ,功能一应区全. 还支持pem证书,回想最初使用putty,还要把pem证书进行转换才 ...

  3. WebDriver API——第3部分Action Chains

    The ActionChains implementation, class selenium.webdriver.common.action_chains.ActionChains(driver) ...

  4. python基础教程_学习笔记12:充电时刻——模块

    充电时刻--模块 python的标准安装包含一组模块,称为标准库. 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 不论什 ...

  5. Hibernate HQL详解

    版权声明:本文为博主原创文章,如需转载请标注转载地址. 博客地址:http://www.cnblogs.com/caoyc/p/5606444.html  1.实体查询: hql="FROM ...

  6. LaTex幻灯片制作

    头部声明是“幻灯片”: \documentclass{beamer} 其他: \documentclass{beamer}\usepackage{graphicx}\usepackage{epstop ...

  7. JBoss类隔离

    http://tiger888.iteye.com/blog/572875这几天,项目组在部署JBOSS时遇到不少问题,都是由于JBOSS的类装载问题引起,特发表一篇BLOG详细说一下JBOSS的类隔 ...

  8. SharePoint专家新闻轮转器WebPart----亲測力推之Web部件

    SharePoint专家新闻轮转器WebPart----亲測力推之Web部件 项目截图: 注意: 专家新闻轮转器还在測试阶段.期待大家讨论和跟踪问题. 项目描写叙述: 专家新闻轮转器是一个ShareP ...

  9. 本体论与OWL

    http://semanticweb.org/wiki/Main_Page.html http://owl.man.ac.uk/documentation.shtml  https://zh.wiki ...

  10. 检查SSD磁盘是否开启了TRIM指令

    fsutil behavior QUERY DisableDeleteNotify 如果查询结果是“DisableDeleteNotify = 0”,代表SSD已经支持并启用Trim指令:如果提示为“ ...