2013-05-18 66 views
0

所以目前我有一個看起來像這樣動態添加成員咖啡腳本對象

module.exports = class Book extends events.EventEmitter 

    constructor: -> 

     @books = 
      a: new small_book('aaa') 
      b: new small_book('bbb') 
      c: new small_book('ccc') 
      d: new small_book('ddd') 

    update: (pair, callback) -> 
     @books[pair].update_book() 
     @emit 'update' 

但是一個對象,我想在做的就是這個,

pairs = 
    a: 'aaa' 
    b: 'bbb' 
    c: 'ccc' 
    d: 'ddd' 

module.exports = class Book extends events.EventEmitter 

    constructor: ->  
     for each pair in pairs 
      @books[pair] = new small_book(pairs[pair]) 

或基本上只是通過我的列表並添加完全儘可能多的對在列表中。我怎樣才能做到這一點?

回答

1

fine manual

悟也可用於迭代中的對象的鍵和值。使用of表示理解對象的屬性而不是數組中的值。

yearsOld = max: 10, ida: 9, tim: 11 

ages = for child, age of yearsOld 
    "#{child} is #{age}" 

所以如果你要循環對象,像這樣做:

constructor: -> 
    @books = { }  
    for k, v of pairs 
     @books[k] = new small_book(v) 

演示:http://jsfiddle.net/ambiguous/GnVXa/

+0

我應該做的,而不是書@books,?也不是v只是一個櫃檯?所以它應該是'new small_book(k)'?我希望書籍具有與成對相同的關鍵字名稱。謝謝 – Loourr

+0

是的,你需要'@books [k]'在我的更新中,抱歉我誤解了你的問題。你不想'new small_book(k)','k'是鍵(''','',''),值(''aaa'','' bbb'',...)將在'v'中。如果你使用'for e,i in array',那麼'e'就是數組元素,'i'就是一個計數器,'for'和'for ... in'的行爲是不同的,因爲它們'對不同種類的東西進行迭代。 –