2014-05-08 33 views
0

我已經看到了一個代碼,這讓我很困惑。我知道this關鍵字指向全局上下文,並且取決於它是如何調用的。這與在javascript中的對象

的代碼是

var gameController = { 
    scores :[20, 34, 55, 46, 77], 
    avgScore:null, 
    players :[ 
     {name:"Tommy", playerID:987, age:23}, 
     {name:"Pau", playerID:87, age:33} 
    ] 
} 

var appController = { 
    scores :[900, 845, 809, 950], 
    avgScore:null, 
    avg  :function() { 

     var sumOfScores = this.scores.reduce (function (prev, cur, index, array) { 
      return prev + cur; 
     }); 

     this.avgScore = sumOfScores/this.scores.length; 
    } 
} 

混亂的部分是

this.avgScore = sumOfScores/this.scores.length; 

我只需要知道哪個對象this關鍵字點。它指向appController還是gameController

任何幫助,將不勝感激 感謝

+2

你不能嚴格地假設它,因爲它取決於你如何調用函數'appController.avg()' – techfoobar

+0

我可以調用像gameController.avg()? – user3609223

+0

我縮進了代碼,所以嵌套更容易看清 –

回答

0

我想說appController。您可以添加console.log(this.players)驗證(它在appControllerundefined

+0

你見過變量sumofscores的代碼... this.scores.reduce在那裏給出了..它和appController.scores.reduce一樣嗎? – user3609223

+0

'reduce()'是'Array' javascript對象的一種方法。 2'scores'變量都是數組,因此代碼是相同的。 –

+0

謝謝..現在我知道了..但它是錯誤的,如果我打電話像gameController.avg()?? .. – user3609223

0

它屬於appController,特別是當appController.avg被調用。

+0

我可以調用像gameController.avg()..它是一種錯誤的調用類型? – user3609223