var Person = (function() {
var privateData = {},
privateId = 0;
function Person(name) {
Object.defineProperty(this, "_id", { value: privateId++ });
privateData[this._id] = {
name: name
};
}
Person.prototype.getName = function() {
return privateData[this._id].name;
};
return Person;
}());
这是我从一个博客粘贴过来的代码,其中博主有这么一句话:‘散列表 privateData 对每个实例都是强引用,导致实例不能被垃圾回收处理。如果存在大量实例必然会导致 memory leak ’。
privateData 引用了实例嘛? 我觉得 privateData 里不是只是 id-name 的映射,name 不也是字符串吗?
1
MinonHeart 2018-03-18 23:45:37 +08:00 via iPhone 1
多实例对应单个 privatedata。这种是方便查找 id 对应的数据,否则没必要这样设计。内存泄露,一般不会,除非一直 new person
|
2
sunjourney 2018-03-19 01:25:49 +08:00 1
尽信书不如无书,这样用没问题的。哪怕 name 是个对象也没问题,实例销毁 privateData 也没引用了
|
3
vevlins OP @MinonHeart 我觉得 privatedata 内没有引用实例,只是存储了它的_id,这个想法对吗
|