创建JS对象的新实例的最有效方法

时间:2012-03-01 14:24:38

标签: javascript oop

我正在尝试找出创建对象新实例的最有效方法。

当我开始时,我使用了这样的东西:

var Foo = function(a, b, c)
{
    this.a = a;
    this.b = b;
    this.c = c;
}

Foo.prototype.func = function()
{
    // Do stuff;
}

var bar = new Foo(1, 2, 3);
bar.func();

之后我听说跳过原型会更好,因为新的原型会耗尽不必要的内存,得到这样的东西:

var Foo = function(a, b, c)
{
    return {
        a:a,
        b:b,
        c:c,
        func:function()
        {
            // Do stuff;
        }
    }
}

var bar = Foo(1, 2, 3);
bar.func();

但是,现在我遇到了在调用Foo的多个实例时多次创建相同func的问题......那么...

var Foo = {
    a:null,
    b:null,
    c:null,
    func: function()
    {
        // Do stuff;
    }
}

function newFoo(a, b, c)
{
    var tmp = function(){};
    var obj = new tmp();
    obj.prototype = Foo;
    obj.a = a;
    obj.b = b;
    obj.c = c;

    return obj;
}

var bar = newFoo(1, 2, 3);
bar.func();

但现在我把原型拿回来......

我在这里寻找速度,这是我的主要关注点。有问题的对象并不太复杂,主要是一堆属性和功能。可以快速创建和销毁对象(这就是速度很重要的原因)

谁知道最有效的方法就是为了这个?

1 个答案:

答案 0 :(得分:2)

别担心,原型显然是创建对象最快的原型。 http://jsperf.com/object-creation-efficiency使其比创建新对象快2%,至少在Google Chrome Canary上如此。

原型更快的浏览器

  • Chrome Canary 19.0.1056.0
  • Firefox 10.0.2

创建新对象的浏览器更快

  • Chrome 17.0.963