在Javascript中为原型分配函数是否有内存性能优势?
我读到向对象添加函数会比向对象原型添加函数占用更多内存在Javascript中为原型分配函数是否有内存性能优势?,javascript,performance,memory,prototype,Javascript,Performance,Memory,Prototype,我读到向对象添加函数会比向对象原型添加函数占用更多内存 function Obj() { this.M = function() { // do something }; } var o = new Obj(); 其思想是,对于Obj的每个构造,都会创建一个新函数并应用于Obj,从而增加内存使用。对于1000个Obj实例,需要创建1000个函数 function Obj() { } Obj.prototype.M = function() { // do something };
function Obj() {
this.M = function() { // do something };
}
var o = new Obj();
其思想是,对于Obj的每个构造,都会创建一个新函数并应用于Obj,从而增加内存使用。对于1000个Obj实例,需要创建1000个函数
function Obj() {
}
Obj.prototype.M = function() { // do something };
var o = new Obj();
对于1000个Obj实例,在这种情况下,只创建一个函数。总共节省999*sizeof(M)内存
真的是这样吗?如果是,以下内容属于哪一类:
function Obj() {
Obj.prototype.M = function() { // do something };
}
var o = new Obj();
我的直觉告诉我,对于本例中的每个Obj构造,每次都会指定原型。我不确定在这种情况下如何看待内存使用,因为将相同的函数分配给原型只会替换该函数,而不是为N个实例创建N个副本
我刚刚开始使用这个方法来封装成员函数的创建,但是我想确保我没有做错事
正如您所猜测的,这将创建一个匿名函数,并在构建新对象期间将其分配给原型。这是毫无意义的。。。除非您在该闭包中实际捕获了类似构造函数参数的内容,否则这种情况也很奇怪-因为无论当前的M()
是什么,它仍将与Obj的所有实例共享:
function Obj(name)
{
Obj.prototype.M = function() { alert("Hello, " + name); }
}
var shog = new Obj("shog");
var josh = new Obj("josh");
shog.M(); // alerts, "Hello, josh"
josh.M(); // alerts, "Hello, josh"
如果你能想出一个很好的方法,我很想听听…… 另见:
除了已经提到的以外。如果闭包对局部变量(如构造函数参数)有句柄,您将看到适度的性能损失。正如前面的海报所提到的,这不仅会很奇怪,而且会防止引用的变量被垃圾收集@bergi我不确定将其标记为重复是否有意义,因为它是在链接重复之前2年提出的。是的,我将其视为标准问答,所以年龄不重要。因为标题而发现您的问题的用户(是否有内存性能优势?)应该重定向到那里。然而,在“这是真的吗?”,你的实际问题似乎是“我想确定我没有做错事”,关于第三种模式,这实际上是……可能的重复
function Obj(name)
{
Obj.prototype.M = function() { alert("Hello, " + name); }
}
var shog = new Obj("shog");
var josh = new Obj("josh");
shog.M(); // alerts, "Hello, josh"
josh.M(); // alerts, "Hello, josh"