【发布时间】:2011-04-02 21:42:47
【问题描述】:
我读到向对象添加函数会消耗更多内存,然后向对象的原型添加函数。
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 个副本。
我刚刚开始使用这种方法来封装成员函数的创建,但想确保我没有做错事。
【问题讨论】:
-
@bergi 我不确定将其标记为重复是否有意义,考虑到它是在链接重复之前 2 年提出的。
-
是的,我将Defining methods via prototype vs using this in the constructor - really a performance difference? 视为标准问答,所以年龄无关紧要。由于标题(是否有内存性能优势?)而发现您的问题的用户应该被重定向到那里。但是,在“真的是这样吗?”旁边,您的实际问题似乎是“我想确定我没有做错事”关于第三种模式,实际上是……
标签: javascript performance memory prototype