Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
学习Javascript的表达能力_Javascript - Fatal编程技术网

学习Javascript的表达能力

学习Javascript的表达能力,javascript,Javascript,我有以下模板的许多功能: function (field, filter){ var q = {}; q[field] = doSomething(filter); return q; } 我对Javascript还不熟悉,但已经意识到它是一种非常有表现力的语言。所以,我的问题是,这样一个函数的主体能否写得更简洁 (我不能将q作为参数传递并消除var q={},因为这些函数的输出不应合并到单个对象散列中) 我非常清楚,知道这个问题的答案可能会使我的代码既不更快也不更清晰。我只想学习

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

function (field, filter){
  var q = {};
  q[field] = doSomething(filter);
  return q;
}
我对Javascript还不熟悉,但已经意识到它是一种非常有表现力的语言。所以,我的问题是,这样一个函数的主体能否写得更简洁

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


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

不,你不能再简化了

您正在尝试这样做:

({})[field] = value;

但是,您希望返回(现在已修改)
{}
。为了做到这一点,你必须保留对它的引用。这就是您的
var q={}
所做的。

您可以使用类似

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) };

这只是我的小道消息,但您所做的与以下代码相当:

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

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

这可能更适合于它不是代码评审。我并不想改进代码或验证它的正确性。我正在寻求更好地学习这门语言。我质疑是否需要这个功能。您只是返回一个字段设置为值的对象;编写(从调用代码)
{field:doSomething(filter)}
是否比调用此函数更清晰?请注意,您通常命名函数。这可能应该是“函数f(字段…”.@dystroy匿名函数通常用作回调函数。这些函数不需要名称。这里没有文本。除此之外,您的建议是有效的,只是每个函数都有不同的
doSomething
,函数的所有目的都是封装这个不同的
doSomething
。因此,函数就在这里h、 但是,为什么不将doSomething变成一个函数,而不是使用当前的doSomething和putinotothisfield()?方法越不需要知道它在哪里使用,就越好!