this
是 JavaScript 语言的一个关键字。javascript
它是函数运行时,在函数体内部自动生成的一个对象,只能在函数体内部使用。html
function test() { this.x = 1; }
上面代码中,函数test
运行时,内部会自动有一个this
对象能够使用。java
那么,this
的值是什么呢?app
函数的不一样使用场合,this
有不一样的值。总的来讲,this
就是函数运行时所在的环境对象。下面分四种状况,详细讨论this
的用法。函数
状况一:纯粹的函数调用this
这是函数的最一般用法,属于全局性调用,所以this
就表明全局对象。请看下面这段代码,它的运行结果是1。spa
var x = 1; function test() { console.log(this.x); } test(); // 1
状况二:做为对象方法的调用code
函数还能够做为某个对象的方法调用,这时this
就指这个上级对象。htm
function test() { console.log(this.x); } var obj = {}; obj.x = 1; obj.m = test; obj.m(); // 1
状况三 做为构造函数调用对象
所谓构造函数,就是经过这个函数,能够生成一个新对象。这时,this
就指这个新对象。
function test() { this.x = 1; } var obj = new test(); obj.x // 1
运行结果为1。为了代表这时this不是全局对象,咱们对代码作一些改变:
var x = 2; function test() { this.x = 1; } var obj = new test(); x // 2
运行结果为2,代表全局变量x
的值根本没变。
状况四 apply 调用
apply()
是函数的一个方法,做用是改变函数的调用对象。它的第一个参数就表示改变后的调用这个函数的对象。所以,这时this
指的就是这第一个参数。
var x = 0; function test() { console.log(this.x); } var obj = {}; obj.x = 1; obj.m = test; obj.m.apply() // 0
apply()
的参数为空时,默认调用全局对象。所以,这时的运行结果为0
,证实this
指的是全局对象。
若是把最后一行代码修改成
obj.m.apply(obj); //1
运行结果就变成了1
,证实了这时this
表明的是对象obj
。
转自:http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html