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