javascript - 创建一个新的JS对象实例的最有效方法

标签 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();

后来我听说最好跳过原型(prototype),因为新的原型(prototype)会耗尽不需要的内存,得到这样的东西:

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();

但现在我得到了原型(prototype)......

我在这里寻找速度,这是我主要关心的问题。所涉及的对象并不太复杂,主要是一堆属性和函数。可以快速创建和销毁对象(这就是速度很重要的原因)

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

最佳答案

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

原型(prototype)更快的浏览器

  • Chrome 金丝雀 19.0.1056.0
  • 火狐 10.0.2

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

  • Chrome 17.0.963

关于javascript - 创建一个新的JS对象实例的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9517877/

相关文章:

java - 是否建议使用静态变量来维护状态?

javascript - 有关 Javascript 中常量类的信息

c# - 在什么情况下我应该使用单例类?

javascript - 如何根据元素中的字符数在延迟后隐藏元素

javascript - AngularJS 搜索名称并计算重复项

javascript - jQuery $ 在 Firefox 中不是一个函数,在 Chrome 中工作并且与 $(document).ready() 一起工作

php - 您会使用 OOP PHP 以相同的方式编写此代码吗?

c++ - 如何防止通过指向其父类型的指针删除对象?

javascript - xmlhttprequest 未将变量从 javascript 传递到 php

javascript - AJAX 接收到的新数据不会覆盖以前的值