js重點--this關鍵字
推薦博客:https://www.cnblogs.com/huaxili/p/5407559.html
this是JavaScript的一個關鍵字,表示的不是對象本身,而是指被調用的上文。
主要用於以下四種環境:
1.直接調用,表示的是全局對象,window
2.作為對象方法被調用,表示的是該對象
3.作為構造函數被調用,表示的是創建的實例
4.可以使用apply(),call()改變this的表示對象,第一個參數就是this
直接調用,表示的是全局對象,window
var count = 1; function func(){ console.log(this.count); } func(); //1
調用函數的結果是1,即this指的是全局對象,window,所以count值為全局變量的值
作為對象方法被調用,表示的是該對象
var count = 1; function func(){ console.log(this.count); }var obj = {}; obj.count = 2; obj.show = func;
obj.show(); //2
func()方法作為對象的方法被調用,此時this表示的被調用的對象obj,所以count值為obj對象中的值count,若是對象obj中沒有count屬性,則為undefined
作為構造函數被調用,表示的是創建的實例
var count = 1; function func(){ this.count = 2; } var Func = new func(); console.log(count); //1 console.log(Func.count); //2
func()作為構造函數,創建了他的實例,此時this表示的是創建的實例Func
可以使用apply(),call()改變this的表示對象,第一個參數就是this
apply()是函數對象的一個方法,它的作用是改變函數的調用對象(實則是將某某對象的某個方法放到另一個好基友對象那裏去執行),它的第一個參數就表示改變後的調用這個函數的對象。因此,this指的就是這第一個參數。同call()
var count = 1; function func(){ console.log(this.count); } var obj = {}; obj.count = 2; func.call(); //1 func.call(obj); //2
可以使用apply()或是call()來改變this指向。此時this表示的是obj對象
嵌套函數作用域中的this
var count = 1; function func(){ console.log(this.count); function func2(){ console.log(this.count); } func2(); } var obj = {}; obj.count = 2; obj.show = func; obj.show(); //2,1
嵌套函數被調用時並沒有繼承被嵌套函數的this引用,在嵌套函數被調用時,this指向全局對象。在有些應用中,我們需要在嵌套函數中讀取調用被嵌套函數的對象的屬性,此時可以聲明一個局部變量保存this引用,
var count = 1; function func(){ console.log(this.count); var self = this; function func2(){ console.log(self.count); } func2(); } var obj = {}; obj.count = 2; obj.show = func; obj.show(); //2,2
此時,嵌套函數與被嵌套函數中的this都表示了obj對象。
js重點--this關鍵字