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对象!
随机推荐
- Android常用酷炫控件(开源项目)github地址汇总
转载一个很牛逼的控件收集帖... 第一部分 个性化控件(View) 主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Gallery.Gri ...
- SQLiteOpenHelper 源码
package com.tongyan.common.db; /** * Copyright (C) 2007 The Android Open Source Project * * Licensed ...
- javascript 反调试 监听用户打开了Chrome devtool
let div = document.createElement('div'); let loop = setInterval(() => { console.log(div); ...
- Java并发编程(八):线程调度——线程池
new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? new Thread(new Runnable() { @Override public void run() { / ...
- SiteWhere物联网云平台架构
SystemArchitecture系统架构 Thisdocument describes the components that make up SiteWhere and how theyrela ...
- Atitit.java的浏览器插件技术 Applet japplet attilax总结
Atitit.java的浏览器插件技术 Applet japplet attilax总结 1. Applet类及各个方法说明 1 2. JApplet类示例 2 3. / 用main方法运行JAp ...
- Sublime Text 2 入门与总结
Sublime Text 2 入门与总结 首语 : 考完试,但又没什么兴趣做课程设计,蛋疼的弄点软件入门的介绍,希望给各位还在吃香蕉的程序猿带来一点启示... 代码编辑器,就像武侠中的武 ...
- IOS使用Charts
近期项目中要做图表功能,为了降低开发量採用的是H5+ECharts来做.这里说一下IOS中怎样使用ECharts以及遇到的问题. 网络模块化单文件引入 <!DOCTYPE html> &l ...
- Http basic Auth 认证方式帮助类
BasicAuthenticationUtil import java.io.IOException; import java.security.MessageDigest; import javax ...
- The Way to Go读书笔记_第4章_基本结构和基本数据类型
“_”标识符 _ 本身就是一个特殊的标识符,被称为空白标识符.它可以像其他标识符那样用于变量的声明或赋值(任何类型都可以赋值给它),但任何赋给这个标识符的值都将被抛弃,因此这些值不能在后续的代码中使用 ...