JavaScript静态对象创建方法的差异
我是一名Java开发人员,正在努力学习JavaScript精神 这两种在JavaScript中创建静态对象的方法是否在任何非语法方式上有所不同?从JavaScript程序员的角度来看,哪种方法更容易接受 方法A: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 */,
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