学习Javascript的表达能力

时间:2012-09-20 17:23:29

标签: javascript

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

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

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

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

我完全清楚知道这个问题的答案可能会使我的代码既不快也不清晰。我只是想学习,这就是全部 - 所以没有火焰,拜托。

3 个答案:

答案 0 :(得分:2)

不,你不能简化它。

你正试图做这样的事情:

({})[field] = value;

但是你想要返回(现在修改过的){}。为了做到这一点,你必须保持对它的引用。这就是你var q = {}的作用。

答案 1 :(得分: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);

无论何时使用它,假设field始终是变量。如果它是字面意思,那么编写

会更加清晰
var o = { fieldLiteral: doSomething(filter) };

答案 2 :(得分:0)

只是我的狡猾的小说,但你正在做的是等同于下面的代码:

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

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