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