Javascript JS-factory模式在存储在内存中时覆盖私有变量
所以我对js还是相当陌生,我想进入更高级的领域,但我对工厂模式有一个问题,下面是基本代码:Javascript JS-factory模式在存储在内存中时覆盖私有变量,javascript,factory-pattern,Javascript,Factory Pattern,所以我对js还是相当陌生,我想进入更高级的领域,但我对工厂模式有一个问题,下面是基本代码: (function () { var objs = []; function createObj(name) { var thename = name; return { publicsaythename : function () { console.log(thename);
(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.logs输出我创建了5次的最后一个对象
5 x thename4
我做错什么了吗?或者这是预期的结果
如果这是预期的话。如何解决存储创建供以后使用的对象的问题?在
theObj
变量中只存储一个对象引用,因此输出符合预期
我认为这是您在第二个循环中打算做的:
for(var i = 0; i < objs.length; i++) {
objs[i].publicsaythename();
}
for(var i=0;i
因此,存储对象的方式没有问题。我猜你只是在使用它们时犯了一个错误。:-) 啊,脸掌。。。。但是,如果对象的作用域仅限于第一个for循环,那么它在第二个循环中如何可用?它不限于第一个循环。javascript中没有块作用域,只有函数作用域(闭包)。因此,
theObj
在匿名函数的作用域中声明,可用于第二个循环。每天学习新的东西。谢谢你的帮助!
for(var i = 0; i < objs.length; i++) {
objs[i].publicsaythename();
}