2013-08-06 90 views
1

我有一個嵌套的對象。這就是:如何輕鬆實現嵌套對象中的屬性?

var Obj = { 
    a: { 
     state: { 
      started: false, 
      players: [], 
      hand: 0, 
      totalHand: 0, 
      teams: { 
       starter: { 
        name: "", 
        handPoints: [], 
        totalPoint: calc(Obj.a.state.teams.starter.handPoints) 
       } 
      } 
     } 
    } 
}; 

就像你看到的,我需要使用handPoints值來設置totalPoint。我一定要打電話,像這樣:

calc(Obj.a.state.teams.starter.handPoints) 

是有關於使用this關鍵字或別的東西某種方式?

如果我有更多的嵌套對象呢?它對我來說看起來很奇怪。

謝謝。

+0

您是否希望每當handPoints被修改時更新totalPoint? – BitHigher

+0

@BitHigher是的。 – alix

+1

http://en.wikipedia.org/wiki/Law_of_Demeter – Esailija

回答

3

您是否嘗試瞭解決方案?它會導致語法錯誤。 Obj在你試圖定義它的時候沒有定義,即使它是你不會得到obj的最新值,因爲你試圖在運行時將它設置爲數組的當前值。

在這裏看到:

syntax error example

你想使該屬性的功能,這樣當他們訪問功能的用戶可以獲取當前總。

像這樣:

totalPoint: function(){ 
    return calc(Obj.a.state.teams.starter.handPoints) 
} 

working example

如果你想縮短參考你可以別名它的某些部分。例如

totalPoint: function(){ 
    var myStarter = Obj.a.state.teams.starter; 
    return calc(myStarter.handPoints) 
} 
1

你可以代替使變量totalPoint成一個函數,並使用this

var Obj = { 
    a: { 
     state: { 
      started: false, 
      players: [], 
      hand: 0, 
      totalHand: 0, 
      teams: { 
       starter: { 
        name: "", 
        handPoints: [ 5,6 ], 
        totalPoints: function() { 
         return calc(this.handPoints); 
        } 
       } 
      } 
     } 
    } 
}; 

這裏是jsFiddle example