Javascript的this的用法

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

相關文章
相關標籤/搜索