Самый эффективный способ создания нового экземпляра объекта JS - PullRequest
5 голосов
/ 01 марта 2012

Я пытаюсь найти наиболее эффективный способ создания нового экземпляра объекта.

Когда я начал, я использовал что-то вроде этого:

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 ... так как насчет ...

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 Ответ

2 голосов
/ 01 марта 2012

Не волнуйтесь, прототип, по-видимому, самый быстрый для создания объекта. http://jsperf.com/object-creation-efficiency дает 2% скорости создания нового объекта, по крайней мере, в Google Chrome Canary.

Браузеры, где прототип быстрее

  • Chrome Canary 19.0.1056.0
  • Firefox 10.0.2

Браузеры, где создание нового объекта происходит быстрее

  • Chrome 17.0.963
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...