Javascript函数根据输入返回两种不同类型的变量?

时间:2013-06-16 13:14:50

标签: javascript function return return-type

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

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

例如(实际的功能比这个更长,更精细,显然只有最后几行经过更长的计算)

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 个答案:

答案 0 :(得分:2)

是;这将很好。

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

答案 1 :(得分:2)

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

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

我在没有名字的情况下留下了它,最后留了一个分号,因为我猜它是通过变量声明的。

答案 2 :(得分: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;
}

答案 3 :(得分:-1)

if ( typeof inputType == 'object') { 
  //object part of code
} else {
  //array part of code
}
相关问题