声明对象并返回它的函数

Function declaring object and returning it

本文关键字:函数 返回 对象 声明      更新时间:2023-09-26

每次我编写一个函数的唯一目的是返回一个配置对象时,我都是这样写的:

function getConfig() {
  return {
    bar: 'bar',
    foo: 'foo'
  }
}

似乎合乎逻辑吧?如果我以后想添加属性,我只需将它们直接添加到对象文本中即可。如果我想添加函数,我将它们的引用添加到对象文字中,并在 getConfig 中提供匹配的函数声明:

function getConfig() {
  return {
    bar: 'bar',
    foo: 'foo',
    getBaz: getBaz
  }
  function getBaz() {
     //get baz
  }
}

但是,很多时候当我查看其他人的代码时,我会看到具有类似目的的函数,但它们经常首先声明对象,然后只返回对象引用:

function getConfig() {
  var config = {
    bar: 'bar',
    foo: 'foo'
  }
  return config;
}

我在这里缺少某种性能改进或其他"技巧"吗?当然,编写这些函数的人必须意识到,只返回对象文字会更容易、更易读。

在您的精简示例中,实际上没有区别。但在某些情况下,声明一个对象变量然后返回它是有意义的。

例如,如果要创建哈希,最好使用空原型创建对象:

function getConfig() {
  var config = Object.create(null);
  config.bar = 'bar';
  config.foo = 'foo';
  return config;
}

还有可读性问题。如果要创建的对象具有多个级别的嵌套层次结构,则对象文本可能会变得难以阅读。

让我们也考虑调试。如果属性赋值是可能失败的表达式,该怎么办?如果您创建一个对象,然后在其自己的行上执行每个分配,则可以非常快速地确定问题。

最后,不同的编码人员有不同的偏好。除非你的组织有风格指南,否则在这样的事情上会有意见分歧——即使它确实有风格指南。