一、 this做为全局变量app
01 var name = "The Window"; 02 var object = { 03 name : "My Object", 04 getNameFunc : function(){ 05 return function(){ 06 return this.name; 07 }; 08 } 09 }; 10 console.log(object.getNameFunc()());
二、 做为对象方法的调用函数
函数还能够做为某个对象的方法调用,这时this就指这个上级对象。this
1 function test2(){ 2 console.log("x的值",this.x); 3 } 4 var o = {}; 5 o.x = 1; 6 o.m = test2; 7 o.m(); // 1
当方法在某个对象的内部时,此时this就指的是此方法的上级对象,由此可知最外层方法的上级对象是window全局对象code
三、 做为构造函数调用对象
所谓构造函数,就是经过这个函数生成一个新对象(object)。这时,this就指这个新对象。get
1 function test3(){ 2 this.x = 1; 3 } 4 var o = new test3(); 5 console.log("x的值",o.x);// 1
四、 apply调用io
apply()是函数对象的一个方法,它的做用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象。所以,this指的就是这第一个参数。console
1 var x = 0; 2 function test4(){ 3 alert(this.x); 4 } 5 var o={}; 6 o.x = 1; 7 o.m = test4; 8 o.m.apply(); //0
apply()的参数为空时,默认调用全局对象。所以,这时的运行结果为0,证实this指的是全局对象。function
若是把最后一行代码修改成o.m.apply(o); //1test
运行结果就变成了1,证实了这时this表明的是对象o。