我以为我之前曾问过这个,但我猜不是。而且我知道JS并没有真正拥有"类"但是,所有人都知道我的意思。
我想知道一种方法是否存在明显的问题。
我将通过例子解释:
方法1 - 使用数组跟踪每个"实例"
var method1 = (function()
{
// store each "instance"
var tracker = [];
return {
// main function
"init" : function(data)
{
// store the instance and return its index
return tracker.push(data) - 1;
},
// gets passed the index of the item
"doSomething" : function(index)
{
// get the item and then do something to item
var data = tracker[index];
alert(data);
}
};
})();
var i1 = method1.init("hi");
var i2 = method1.init("bye");
method1.doSomething(i1); // alerts "hi"
method1.doSomething(i2); // alertrs "bye"
方法2 - "类"
var method2 = (function()
{
var init = function(data)
{
var myData = data;
this.getData = function()
{
return myData;
}
};
init.prototype.doSomething = function()
{
alert(this.getData());
}
return init;
})();
var i1 = new method2("hi");
var i2 = new method2("bye");
i1.doSomething(); // alerts "hi"
i2.doSomething(); // alerts "bye"
答案 0 :(得分:1)
是的,方法1的一个明显问题是跟踪器数据永远不会被垃圾收集(除非在某个时候删除整个method1
模块)。
所以不要这样做,使用类似于方法2的基于实例的方法。只要执行i1 = null
,就可以释放字符串"hi"
。