一、 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。