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

Joh*_*han 5 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();
Run Code Online (Sandbox Code Playgroud)

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

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();
Run Code Online (Sandbox Code Playgroud)

但是,现在我遇到了在调用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();
Run Code Online (Sandbox Code Playgroud)

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

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

谁知道最有效的方法就是为此?

Ry-*_*Ry- 2

别担心,原型显然是创建对象最快的方法。http://jsperf.com/object-creation-efficiency认为它比创建新对象快 2%,至少在 Google Chrome Canary 上是这样。

原型速度更快的浏览器

  • Chrome 金丝雀 19.0.1056.0
  • 火狐浏览器10.0.2

创建新对象速度更快的浏览器

  • 铬 17.0.963