2012-09-20 98 views
1

的表現力我有很多的以下模板的功能:學習JavaScript

function (field, filter){ 
    var q = {}; 
    q[field] = doSomething(filter); 
    return q; 
} 

我是新來的Javascript,但已經得到了想法,這是一個非常傳神的語言。所以,我的問題是這個函數的主體可以寫得更簡潔嗎?我不能通過q作爲參數,並消除var q = {},因爲這些函數的輸出不應該合併成一個對象散列)。

我完全知道,知道這個問題的答案可能會讓我的代碼既不快也不清晰。我只想學習,這就是全部 - 所以沒有火焰,請。

+1

否;它不能。 – SLaks

+2

這可能更適合http://codereview.stackexchange.com/ – j08691

+0

這不是codereview。我不是在尋求改進代碼或驗證它的正確性。我正在努力學習更好的語言。 – mark

回答

2

不,你不能簡化它更多。

你正在嘗試做這樣的事情:

({})[field] = value; 

但你要返回(現在修改){}。爲了做到這一點,你必須保留一個參考。這就是你的var q = {}

0

您可以隨時避免重複在你的代碼,使用類似

function objectWith(field, value) { 
    var q = {}; q[field] = value; return q; 
} 

這將使您的原始代碼到

function f(field, filter) { 
    return objectWith(field, doSomething(filter); 
} 

甚至更​​好,避免「F」乾脆使用

var o = objectWith(field, doSomething(filter); 

無論何時你最初使用它,假設字段總是一個變量。要不是文字,這將是更清楚寫

var o = { fieldLiteral: doSomething(filter) }; 
+0

這裏沒有文字。除此之外,你的建議是有效的,除了每個函數具有不同的'doSomething',並且該函數的所有目的都封裝了這個不同的'doSomething'。所以,這個功能就在這裏。 – mark

+0

啊,但是爲什麼不把doSomething變成函數而不是使用你當前的doSomethingAndPutItIntoThisField()?一種方法需要知道它在哪裏使用的越少越好! – tucuxi

0

只是我的迂迴珍聞,但你在做什麼是相當於爲下面的一段代碼:

function f(field, filter){ 
    var q = {}; 
    q.__defineGetter__(field, doSomething(filter)); 
    return q; 
} 

可能有一些以這種形式縮短它的方式。