1

我有很多以下模板的功能:

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

我是 Javascript 的新手,但已经知道它是一种非常富有表现力的语言。所以,我的问题是这样一个函数的主体可以写得更简洁吗?

(我不能q作为参数传递并消除var q = {},因为这些函数的输出不应合并到单个对象哈希中)。

我完全清楚知道这个问题的答案可能会使我的代码既不快也不清晰。我只是想学习,仅此而已-请不要着火。

4

3 回答 3

2

不,你不能再简化它了。

你正在尝试做这样的事情:

({})[field] = value;

但是你想返回 (now modified) {}。为此,您必须保留对它的引用。这就是你的var q = {}工作。

于 2012-09-20T17:33:48.193 回答
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) };
于 2012-09-20T17:42:03.847 回答
0

只是我的狡猾的花絮,但你正在做的是相当于下面的代码:

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

可能有某种方法可以以这种形式缩短它。

于 2012-09-20T17:48:13.310 回答