
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 多实例对应单个 privatedata。这种是方便查找 id 对应的数据,否则没必要这样设计。内存泄露,一般不会,除非一直 new person |
2 sunjourney 2018-03-19 01:25:49 +08:00 尽信书不如无书,这样用没问题的。哪怕 name 是个对象也没问题,实例销毁 privateData 也没引用了 |
3 vevlins OP @MinonHeart 我觉得 privatedata 内没有引用实例,只是存储了它的_id,这个想法对吗 |