【问题标题】:Differences in JavaScript Static Object Creation ApproachesJavaScript 静态对象创建方法的差异
【发布时间】:2013-07-25 14:19:34
【问题描述】:

我是一名尝试学习 JavaScript 精神的 Java 开发人员。

这两种在 JavaScript 中创建静态对象的方法是否在任何非语法方面都不同?从 JavaScript 程序员的角度来看,哪种方法更容易接受?

方法 A:

var obj = {};
obj.field1 = /* some expression */;
obj.field2 = /* some expression */;

方法 B:

var obj = {
    field1: /* some expression */,
    field2: /* some expression */
};

【问题讨论】:

  • 我倾向于使用方法 B。当您需要访问对象字面量时,方法 A 很好。例如,如果你想定义field2 基于 field1;你不能在对象字面量初始化中完全做到这一点。
  • 另一种类似但效果不同的方式是在构造函数上使用new 运算符:var obj = new (function Object() {this.field1 = /* some expression */; this.field2 = /* some expression */; var privateProperty = "somevalue"; this.field3 = this.field1+privateProperty; })(); 这允许您在需要时隐藏一些属性。
  • 另一种方式是使用:Object.createdeveloper.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

标签: javascript static static-members object-literal


【解决方案1】:

我相信这两个对象最终都会以类似的方式创建,并且性能差异(如果有的话)将非常微小,以至于您不应该注意到差异。

不过,这不是通用的。创建数组时,使用与 B 类似的方法更有效。这是因为(至少在 V8 中)分配具有设定大小的数组更有效,因为它知道数组的大小。

// Here V8 can see that you want a 4-element array containing numbers:
var a = [1, 2, 3, 4];

// Don't do this:
a = []; // Here V8 knows nothing about the array
for(var i = 1; i <= 4; i++) {
    a.push(i);
}

来源:Smashing Magazine

我建议尝试Chrome Profiling Tools,看看您是否能注意到两种方法的效率之间的差异,尽管我认为如果存在差异,那将太小而无法产生影响。

此外,如果您是 JavaScript 新手,我建议您查看由 AirBnB 创建的很棒的 JavaScript style guide。编写高效、干净的 JavaScript 有很多很棒的技巧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-26
    • 2011-02-24
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    相关资源
    最近更新 更多