2014-04-14 88 views
0

我想知道並理解這個和那個之間的不同,以及何時需要使用它。 我準備好了嗎許多後,很多教程,但我不明白,但這和那個有什麼區別

這是我的課

function Container(param) { 

    function dec() { 
     if (secret > 0) { 
      secret -= 1; 
      return true; 
     } else { 
      return false; 
     } 
    } 

    this.member = param; 
    var secret = 3; 
    var that = this; 

    this.service = function() { 
     console.log(this.member); // foo 
     console.log(that.member); // foo 
     return dec() ? that.member : null; 
    }; 
} 

var myContainer = new Container('foo'); 
myContainer.service() 

調用myContainer.service()將返回「ABC」的第一個三次它叫做。 之後,它將返回null

爲什麼我必須要做var that = this ??

+1

另請參閱http://stackoverflow.com/questions/3127429/javascript-this-keyword – elclanrs

+0

您是否嘗試過不使用''來查看會發生什麼?可能是瞭解發生了什麼的好方法。 – CoderDennis

+0

在你的例子中,我沒有看到「that」的需要。試試'var s = myContainer.service; s()'看看有沒有'that'發生了什麼。 – phylax

回答

4

this是一個獲取當前函數的上下文(取決於它如何被調用)的變量。

that沒有特別的意義。它只是一個賦值的變量。

在此特定情況下,that被分配thisContainer正在運行具有的值,並使用該service函數內(但仍具有是調用Container的上下文值。由於service是一個不同的功能,它的this值可以是不同的。


通常,對於功能這個特殊的設計,Container將被稱爲構造函數(這樣this將是Container的實例對象),然後將在該實例對象的上下文中調用service,因此您可以使用this而不是通過that傳遞值。我不知道爲什麼該代碼的作者在這裏選擇使用that

+0

但爲什麼我必須做var that = this; ? http://javascript.crockford.com/private.html – monkeyUser

+0

@monkeyUser:你不*必須*。如果你不想要 - 你可能不會定義'那個'變量。 – zerkms

+0

@monkeyUser - 否則'that'根本就沒有值。 – Quentin