我看到过这样的说法:将函数添加到对象中会比将函数添加到对象原型中占用更多的内存。
function Obj() {
this.M = function() { // do something };
}
var o = new 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个副本。
我刚开始使用这种方法来封装成员函数的创建,但希望确保我没有做错事。