对象作为JavaScript

时间:2015-04-25 05:34:39

标签: javascript frontend

最近我在一些我正在研究的项目的代码中看到了类似的内容......

var domObjects = {
  $body: $('body'),
  $someDiv: $('.some-div'),
  $someOtherDiv: $('.some-other-div')
}

var constants = {
  CONST_ONE: 'some value',
  CONST_TWO: 'some value',
  CONST_THREE: 'some value'
}

正如您已经注意到这段代码意图替换这样的代码:

var $body = $('body'),
    $someDiv = $('.some-div'),
    $someOtherDiv = $('.some-other-div');

var CONST_ONE = 'some value',
    CONST_TWO = 'some value',
    CONST_THREE = 'some value';

这背后的想法是将变量包装在更多的语义中。对象所以它可以更容易使用,但我真的怀疑是出于美观的原因创建一个对象。

  • 这可以吗?
  • 如果我这样做声明有什么好处吗?
  • 有什么不利之处吗?

3 个答案:

答案 0 :(得分:3)

由于访问变量需要更多输入,因此使用此样式的速度更快,因此需考虑constants.const1而不是仅键入const1

然而,我至少喜欢这种风格:

  • 变量是'作用域'(因此全局碰撞的可能性较小)

  • 它们在语义上被封装在它们所属的位置 - 它解释了它们属于哪个组 - 对于另一个选择这个变量的人来说,更容易理解这些变量

  • 它们更易于使用 - 如果要捕获组的所有属性 - 例如,考虑对象是department,您只需迭代department,其中包含所有属性您需要的相关信息

DOM对象可能有点不必放​​在一个对象中,因为其余的我完全同意将它们包装在这样的对象中。

答案 1 :(得分:2)

非常好:JavaScript允许您将任何值放在对象中,这意味着您可以将JS对象用作"容器"对于像常见变量或常量这样的东西。

这主要取决于个人偏好。像这样的结构更容易传递,所以你不要经常" requery"对于像$ body或$ document这样的东西,它也可以隐藏对象中的内容,所以你不知道多少" room"你的功能输入正在接受。

这是一个问题吗?也许,也许不是,这取决于编写/使用代码的人。这个问题是(超出"这是好的"部分,它完全是),主要是意见问题,由代码风格指南引导,以及关于如何打包常用引用的注意事项。

有一种情况,这种风格有所不同,而且在展开交换机时也是如此。例如:

function(input) {
  var a = "cat",
      b = "cow",
      c = "goldfish";
  console.log("testing multiple case identities...");
  switch(input) {
    case "small": return a;
    case "large": return b;
    case "aquatic": 
    case "fish": return c;
  };
  return false;
}

我们可以立即进行检查,而不是这种检查方式:

var values = {
  "small": generateSmallAnimal,
  "large": generateLargeAnimal,
  "aquatic": generateFish
  "fish": generateFish
};

function(input) {
  console.log("direct jump...");
  return values[input]();
}

完成,没有多个案例检查,只是立即跳到正确的事情。

答案 2 :(得分:2)

  

这可以吗?

是的,这完全没问题。我在一个对象中看到了很多JS libs组相关的值。例如,许多jQuery插件将配置值存储到settings对象中。

  

如果我以这种方式做声明有什么好处吗?

对我而言,主要优点是相关值在语义上组合在一起。想象一下,当我们在现代IDE中编码时,我只需键入objectName[dot],让IDE列出该特定组的变量。

  

有什么不利之处吗?

虽然对于现代浏览器来说并不是那么重要,但here已经有了性能差异。