this是Javascript语言的一个关键字。

它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。比如,

function test() {
this.x = 1;
}

随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象。

下面分四种情况,详细讨论this的用法。

情况一:纯粹的函数调用

这是函数的最通常用法,属于全局性调用,因此this就代表全局对象Global。

请看下面这段代码,它的运行结果是1。

function test() {
this.x = 1;
alert(this.x);
}
test(); // 1

为了证明this就是全局对象,我对代码做一些改变:

var x = 1;
function test() {
alert(this.x);
}
test(); // 1

运行结果还是1。再变一下:

var x = 1;
function test() {
this.x = 0;
}
test();
alert(x); //0

情况二:作为对象方法的调用

函数还可以作为某个对象的方法调用,这时this就指这个上级对象。

function test() {
alert(this.x);
}
var o = {};
o.x = 1;
o.m = test;
o.m(); // 1

情况三 作为构造函数调用

所谓构造函数,就是通过这个函数生成一个新对象(object)。这时,this就指这个新对象。

function test() {
this.x = 1;
}
var o = new test();
alert(o.x); // 1

运行结果为1。为了表明这时this不是全局对象,我对代码做一些改变:

var x = 2;
function test() {
this.x = 1;
}
var o = new test();
alert(x); //2

运行结果为2,表明全局变量x的值根本没变。

情况四 apply调用

apply()是函数对象的一个方法,它的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象。因此,this指的就是这第一个参数。

var x = 0;
function test() {
alert(this.x);
}
var o = {};
o.x = 1;
o.m = test;
o.m.apply(); //0

apply()的参数为空时,默认调用全局对象。因此,这时的运行结果为0,证明this指的是全局对象。

如果把最后一行代码修改为

o.m.apply(o); //1

运行结果就变成了1,证明了这时this代表的是对象o。

情况四 call调用

同apply调用,只是传入参数的形式不同,apply以数组的方式传入参数,call用逗号风格参数传入。

最新文章

  1. Web应用性能优化思路
  2. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(九)地图定位模块
  3. 《Windows核心编程》学习笔记(9)– 在win7或者vista系统下提升一个进程的运行权限
  4. 安装MySQL,在./configure时出现错误:error: No curses/termcap library found的解决办法
  5. ubuntu 12.04内核升级到3.13.1
  6. smarty
  7. VS2010在C盘下生成的.iTrace文件解决办法 ,c盘偷偷的减少,心很烦啊,找了半天才知道是这个问题
  8. SPARK如何使用AKKA实现进程、节点通信
  9. Jquery EasyUI datagrid 的一些问题
  10. java中抽象类和接口之间的异同点
  11. C# 得到EXCEL表格中的有效行数和列数
  12. 缓存MEMCACHE php调用(一)
  13. centos7上修改lv逻辑卷的大小
  14. AWTK(Toolkit AnyWhere): 为嵌入式、手机和桌面开发的通用GUI【转】
  15. JAVA面试精选【Java基础第三部分】
  16. SparseArray类
  17. keepalived+nginx实现HA高可用的web负载均衡
  18. IOC轻量级框架之Autofac
  19. Modbus 通讯协议
  20. 25+开源的在线购物软件(PHP, JavaScript 和 ASP.Net)

热门文章

  1. 快速玩转Apple Pay开发
  2. oracle中的turnc,round,floor,ceil,coalesce函数
  3. gSoap客户端示例程序
  4. Android图片处理神器BitmapFun源码分析
  5. [转]View属性 之 paddingStart & paddingEnd
  6. Python -- Web -- WSGI
  7. 利用工具MailUtils实现邮件的发送,遇到的大坑,高能预警!!
  8. LINUX中磁盘挂载与卸除
  9. android:分享 一个很强大的LOG开关---Log.isLoggable
  10. activemq学习