在性能和创建的数据结构方面,是:
function coords(xpos, ypos, zpos){
this.xpos = xpos;
this.ypos = ypos;
this.zpos = zpos;
return this;
}
var coordinates = coords(0, 0, 0); // notice I am not calling new
与:
相同function coords(xpos, ypos, zpos){
return {
xpos : xpos,
ypos : ypos,
zpos : zpos,
};
}
var coordinates = coords(0, 0, 0);
假设我有很多这种方法,是否有更高效的方法来生成coordinates
。
答案 0 :(得分:3)
+
更改为=
,coordinates
是undefined
,因为您没有使用new
而coords
没有返回任何内容。最快的方法是根本不使用任何功能,例如
var coordinates = { xpos: 0, ypos: 0, zpos: 0 };
答案 1 :(得分:2)
第一个代码段应如下所示:
function coords(xpos, ypos, zpos) {
this.xpos = xpos;
this.ypos = ypos;
this.zpos = zpos;
}
var coordinates = new coords(0, 0, 0);
那就是说,你的选择将取决于你想要对结果做什么(你想要一个对象文字或一个你可以定义的原型的对象),但是对于任何一个的表现都会差不多合理使用。
答案 2 :(得分:1)
在创建对象的第一种方法中,您必须使用
var coordinates = new coords(0, 0, 0);
并且在使用new
的javascript中非常昂贵。在第二种方法中,执行该函数将返回一个坐标对象。
我更喜欢第二种方法,尽管它在现代浏览器中没有太大区别。
在Firefox 7中,第一种方法比第二种方法慢约75%,在第17种方法中,它的速度慢了约30%答案 3 :(得分:1)
在您的第一个示例中,coordinates
未定义。该函数没有返回任何内容。您需要在第一个示例中使用new
,以使其与第二个示例相同。 (你也有一个错字,+
应该是=
)
function coords(xpos, ypos, zpos){
this.xpos = xpos;
this.ypos = ypos;
this.zpos = zpos;
}
var coordinates = new coords(0, 0, 0);
在第二个示例中,您没有使用JSON。你只是使用obect文字。 JSON是一种将对象/数组表示为字符串的方法。
至于性能,第二个会(可能)更快,但这不是你应该担心的事情。