2014-07-08 51 views
2

我想更好地理解JavaScript和JavaScript的用法。我在這裏跟隨道格拉斯克羅克福德的教程:http://javascript.crockford.com/private.html 但我對一些事情感到困惑。我給了下面的例子,我想知道如果我作出了正確的使用它們:JavaScript:相對於此

function ObjectC() 
{ 
    //... 
} 

function ObjectA(givenB) 
{ 
    ObjectC.call(this); //is the use of this correct here or do we need that? 

    var aa = givenB; 
    var that = this; 

    function myA() 
    { 
     that.getA(); //is the use of that correct or do we need this? 
    } 

    this.getA = function() //is the use of this correct? 
    { 
     console.log("ObjectA"); 
    }; 


} 

function ObjectB() 
{ 

    var that = this; 

    var bb = new ObjectA(that); //is the use of that correct or do we need this? 

    this.getB = function() 
    { 
     return bb; 
    }; 

    that.getB(); //is the use of that correct or do we need this? 


} 

注意這只是一個例子。

+0

簡單:'that'不是一個關鍵字,而是一個普通的變量名。 – Bergi

+2

在投票結束問題之前,請解釋一下你不喜歡的問題,以便將來有機會改進。 – FranXh

+0

「that」只是一個變量,用於存儲「this」的當前值,該變量隨着程序執行上下文的變化而變化 - 例如,當你輸入一個新的範圍 –

回答

3
ObjectC.call(this); //is the use of this correct here or do we need that? 

您需要了解的第一件事是how the this keyword作品。它的價值取決於如何調用函數/方法/構造函數。

在這種情況下,function ObjectA是一個構造函數,所以你可以在它的代碼裏面使用this。事實上,在var that = this;中,你聲明它們是完全相同的(除非在分配給它之前使用that)。

function myA() { 
    that.getA(); //is the use of that correct or do we need this? 
} 

再次,它取決於函數是如何被調用 - 你不幸沒有告訴我們。如果如果是該實例的一種方法,則this本來可以;但是看起來你需要使用that

this.getA = function() //is the use of this correct? 

如上所述,使用that不會有任何區別。

var bb = new ObjectA(that) //is the use of that correct or do we need this? 
var that = this; 

thatundefined當它被用在這裏。無論如何,它應該與this具有相同的值。更好地使用this

that.getB(); //is the use of that correct or do we need this? 

同樣,都具有同樣的效果。但由於您不需要需要that,您應該只使用this

3

一切都是正確的,除了:

function ObjectB() 
{ 
    var bb = new ObjectA(that) //this is wrong 
    var that = this; 

    this.getB = function() 
    { 
     return bb; 
    }; 

    that.getB(); 
} 

你缺少;that沒有申報。


你需要that(在你的情況,這是你使用的變量名),當你想在其他範圍使用:

function ObjectB() 
    { 
     var that = this; 

     // here 'this' is good 
     function() 
     { 
      // Here 'this' doesn't refer to the 'this' you use in function ObjectB() 
      // It's not the same scope 

      // You'll need to use 'that' (any variable from the ObjectB function that refers to 'this') 
     }; 

     // Here 'that' = 'this', so there is no difference in using one or another 
    } 
+0

我的錯誤,修復它 – FranXh

15

this在JavaScript中總是指當前對象,其方法稱爲。但有時您需要更深入地訪問您的對象的this。例如,在回調中。像這樣:

function MyClass() { 
    this.a = 10; 
    this.do = function() { 
     http.get('blablabla', function(data) { 
      this.a = data.new_a; 
     }); 
    }; 
} 

它不會工作,因爲this回調可參考http,一些DOM元素或只是窗口(這是非常常見的)。因此,定義selfthat是一個常用的解決方案,它是this的別名或您的對象,因此您可以在其中任何位置引用它。

function MyClass() { 
    var self = this; 
    this.a = 10; 
    this.do = function() { 
     http.get('blablabla', function(data) { 
      self.a = data.new_a; 
     }); 
    }; 
} 

這應該給你視覺爲什麼它是用來和應該如何使用。

有沒有其他原因當期的我,如果我錯了)創建特殊的變量,你可以使用this你的對象發送到其他對象和做的事情,很多任務,這樣的邏輯,哇...

0

在這種情況下,「that」是一個簡單的變量,它等於「this」。這意味着說「那個」和說「這個」完全一樣,這會導致不必要的複雜化。

此代碼:

var that=this; 
that.getA(); 

將產生相同的結果,因爲這代碼:

this.getA(); 

有一個變量來表示「這」只是複雜的事情時,你可以說「這個」。

+0

-1錯過了一點。有時需要引用類自己對象的函數。閱讀其他答案。這不是沒有必要的。 – user3685285