JS -工厂模式覆盖私有变量存储在内存中

JS - factory pattern overwrites private vars when stored in memory

本文关键字:存储 变量 内存 工厂 模式 覆盖 JS      更新时间:2023-09-26

所以我对js还是很陌生,我想进入更高级的东西,但我有这个问题与工厂模式,这是基本的代码:

(function () {
    var objs = [];
    function createObj(name) {
        var thename = name;
        return {
            publicsaythename : function () {
                console.log(thename);   
            }
        }
    }
    for(var i = 0; i < 5; i++) {
        var theObj = createObj("thename" + i);
        theObj.publicsaythename();
        objs.push(theObj);
    }
    for(var i = 0; i < objs.length; i++) {
        theObj.publicsaythename();
    }
})();

console.log调用的第一组输出是我所期望的:

thename0
thename1 
thename2 
thename3 
thename4 

第二系列控制台。log输出我创建的最后一个对象5次。

 5 x thename4 

我做错了什么吗?或者这是意料之中的?

也可以,如果需要的话。如何解决能够存储您创建的对象以供以后使用的问题?

您只在theObj变量中存储一个对象引用,因此输出如预期的那样。

我认为这是你打算在第二个循环中做的:

for(var i = 0; i < objs.length; i++) {
     objs[i].publicsaythename();
}

所以存储对象的方式没有问题。我猜你只是用错了。: -)