2012-10-09 69 views
0

我已經做了這樣的事情返回設置:如何從一個對象

myProject = 

    settings: 
    duration: 500 
    value: 'aValue' 

    aFunction: -> 
    myElement.fadeOut myProject.settings.duration 

這僅僅是一個樣品,但我的項目就是這樣。很多時候,我必須參考設置才能獲得一定的價值,而且我總是要寫myProject.settings.value,而且看起來不太好。

我的問題是,我可以調用一個返回所需值的函數嗎?事情是這樣的:

aFunction: -> 
    myElement.fadeOut getSetting(duration) 

我試着用

getSetting: (param) -> 
    myProject.settings.param 

但失敗了嗎?這是爲什麼? 謝謝!

+0

怎麼失敗了?你有錯誤嗎? – Rob

+0

我總是得到'undefined' – Rockbot

回答

2

要通過一個變量訪問對象的屬性,你可以這樣做:

object[key] 

在CoffeeScript中,最後一行應爲返回值,在你的榜樣: 請注意@(=本)。

myProject = 

    settings: 
    duration: 500 
    value: 'aValue' 

    fadeOut: ($element) -> 
    $element.fadeOut @getSetting('duration') 

    getSetting: (key) -> 
    @settings[key] 

myProject.fadeOut($myElement) 

的JavaScript:

var myProject; 

myProject = { 
    settings: { 
    duration: 500, 
    value: 'aValue' 
    }, 
    fadeOut: function($element) { 
    return $element.fadeOut(this.getSetting('duration')); 
    }, 
    getSetting: function(key) { 
    return this.settings[key]; 
    } 
}; 

myProject.fadeOut($myElement); 
+0

是的,這個工程!但我想傳遞像myElement.fadeOut(函數(持續時間))通緝參數' - 我有大約10至15個參數存儲。我當前的解決方案可以工作,但看起來像'myElement.fadeOut(myProject.settings.duration)' – Rockbot

+0

嗯,當我想到它時 - 如果沒有更好的解決方案,@settings使我的代碼更好一點! – Rockbot

+0

對不起,我不明白你真正想要什麼,請看我的編輯(小提琴已編輯)。重要的部分是@settings [key]而不是@ settings.key。 – SuperSkunk