我正在尝试找出创建对象新实例的最有效方法.
当我开始时,我使用了这样的东西:
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)
但现在我把原型拿回来......
我在这里寻找速度,这是我的主要关注点.有问题的对象并不太复杂,主要是一堆属性和功能.可以快速创建和销毁对象(这就是为什么速度很重要)
谁知道最有效的方法就是为此?
别担心,原型显然是创建对象最快的方法。http://jsperf.com/object-creation-efficiency认为它比创建新对象快 2%,至少在 Google Chrome Canary 上是这样。