最近我在一些我正在研究的项目的代码中看到了类似的内容......
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';
这背后的想法是将变量包装在更多的语义中。对象所以它可以更容易使用,但我真的怀疑是出于美观的原因创建一个对象。
答案 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已经有了性能差异。