javascript" classes" vs一个数组跟踪器

时间:2017-03-25 19:34:24

标签: javascript

我以为我之前曾问过这个,但我猜不是。而且我知道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"

1 个答案:

答案 0 :(得分:1)

是的,方法1的一个明显问题是跟踪器数据永远不会被垃圾收集(除非在某个时候删除整个method1模块)。

所以不要这样做,使用类似于方法2的基于实例的方法。只要执行i1 = null,就可以释放字符串"hi"