Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript静态对象创建方法的差异_Javascript_Static_Static Members_Object Literal - Fatal编程技术网

JavaScript静态对象创建方法的差异

JavaScript静态对象创建方法的差异,javascript,static,static-members,object-literal,Javascript,Static,Static Members,Object Literal,我是一名Java开发人员,正在努力学习JavaScript精神 这两种在JavaScript中创建静态对象的方法是否在任何非语法方式上有所不同?从JavaScript程序员的角度来看,哪种方法更容易接受 方法A: var obj = {}; obj.field1 = /* some expression */; obj.field2 = /* some expression */; 方法B: var obj = { field1: /* some expression */,

我是一名Java开发人员,正在努力学习JavaScript精神

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

方法A:

var obj = {};
obj.field1 = /* some expression */;
obj.field2 = /* some expression */;
方法B:

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

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

然而,这并不是普遍存在的。在创建数组时,使用与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);
}
//在这里,V8可以看到您想要一个包含数字的4元素数组:
变量a=[1,2,3,4];
//不要这样做:
a=[];//这里V8对数组一无所知

对于(var i=1;i我倾向于使用方法B。当您需要访问对象文本时,方法A很好。例如,如果您想基于
field1
定义
field2
;您不能在对象文本初始化中准确地这样做。另一种类似但效果不同的方法是在构造函数上使用
new
操作符tor function:
var obj=new(function Object(){this.field1=/*一些表达式*/;this.field2=/*一些表达式*/;var privateProperty=“somevalue”;this.field3=this.field1+privateProperty;})(
这允许您在需要时隐藏一些属性。另一种方法是使用:
Object.create