2

我正在尝试遵守规则并避免重复相同的代码。

我有这个单一的功能,但根据输入,我希望它返回一个对象数组或一个对象(不是只有一个对象的数组)

例如(实际函数显然比这个更长更复杂,经过更长的计算后只有最后几行)

function (nameParameter, ageParameter, inputType)
{
  if (inputType === "asObject")
  {
    var x = {};
    x.name = nameParameter;
    x.age = ageParameter;
    return x;
  }
  else if (inputType === "asArray")
  {
    var y = [];
    y.push(nameParameter);
    y.push(ageParameter);
    return y;
  }
};

这是可能的吗?如果是这样,这是一种好的做法吗?还有其他方法吗?

否则我将不得不使用几乎完全相同的代码创建两个不同的函数。

4

4 回答 4

2

是的; 那会很好用。

Javascript 不是强类型的;函数可以随时返回他们想要的任何内容。

于 2013-06-16T13:19:23.947 回答
2

您可以通过使用已设置的值声明对象和数组来简化代码,但在我看来,如果您有这种严格类型的编码,则没有必要保留此功能......无论如何,这是一个简化版本:

function (nameParameter, ageParameter, inputType) {
    var ret;
    if (inputType === "asObject") {
        ret = {
            name: nameParameter,
            age: ageParameter
        };
    } else if (inputType === "asArray") {
        ret = [nameParameter, ageParameter];
    }
    return ret;
};

我把它留下了,没有名字,最后用分号,因为我猜它是通过变量声明的。

于 2013-06-16T13:20:53.017 回答
2

不要这样做。实现一个版本并添加一个包装函数来转换您可能想要的另一种格式。这样调用者总是得到一致的行为,并且仍然没有代码重复。

function asObject(nameParameter, ageParameter)
{
    //Lots of work here.
    var x = {};
    x.name = nameParameter;
    x.age = ageParameter;
    return x;
};

function asArray(nameParameter, ageParameter)
{
  //Just defer to the other version and repack its response.
  var o = asObject(nameParameter, ageParameter);
  var y = [o.nameParameter,o.ageParameter ]; 
  return y;
}
于 2013-06-16T13:27:35.203 回答
-1
if ( typeof inputType == 'object') { 
  //object part of code
} else {
  //array part of code
}
于 2013-06-16T13:20:59.113 回答