设置函数变量与使用对象文字相同

时间:2012-03-15 15:15:33

标签: javascript json

在性能和创建的数据结构方面,是:

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

4 个答案:

答案 0 :(得分:3)

  1. 第二个示例使用object literal,而非JSON
  2. 就语义而言:两者在语义上并不相同。即使您在第一个示例中将+更改为=coordinatesundefined,因为您没有使用newcoords没有返回任何内容。
  3. 在性能方面:这是微优化的微观方面。不要再考虑它并继续解决实际问题。
  4. 如果你仍然关心性能差异(你不应该),请写一个jsPerf基准。

  5. 作为SJFrK commented

      

    最快的方法是根本不使用任何功能,例如

    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中非常昂贵。在第二种方法中,执行该函数将返回一个坐标对象。

我更喜欢第二种方法,尽管它在现代浏览器中没有太大区别。

这是一个简单的基准http://jsperf.com/objecr-vs-fn-perf-test

在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是一种将对象/数组表示为字符串的方法。

至于性能,第二个会(可能)更快,但这不是你应该担心的事情。