要向对象添加功能,我可以像AddX
一样将其写入其中:
function Foo()
{
this.x = 1;
this.AddX = function(y)
{
this.x += y;
}
}
但是我发现其他方法可能是使用
prototype
:function Foo()
{
this.x = 1;
}
Foo.prototype.AddX = function(y)
{
this.x += y;
}
使用:
obj = new Foo;
obj.AddX(5);
alert(obj.x);
在两种情况下结果都是相同的。哪条路线最佳,或者两者之间有什么区别?还有性能问题吗?
最佳答案
在您的第一种方法中,addX
是一个实例方法。因此,每个Foo
实例将拥有自己的addX
副本。
在第二种方法中,addX
被添加到prototype
上,并且Foo
的每个实例都共享相同的原型(prototype)。
因此,第二种方法将节省更多的内存。如果要创建大量实例,则最好使用第二种方法。