我尝试了解模块设计模式在 JS 中的使用。我的问题是对以下函数的多次调用(使用 new 运算符)将创建具有函数 inc
和 reset
副本的对象。这似乎是一种浪费,使这种模式无用。我错过了什么?
function Counter(start) {
let counter = 0;
function setCounter(x) { counter = x;} // private function
setCounter(start);
return {
inc: function () { return counter++;},
reset: function () { setCounter(0); }
}
}
答案 0 :(得分:0)
虽然您有多个 inc
和 reset
函数,但它们对不同的 counter
变量进行操作,因此不是副本。
function counter(start) {
let counter = 0;
function setCounter(x) {
counter = x;
} // private function
setCounter(start);
return {
inc: function() {
return counter++;
},
reset: function() {
setCounter(0);
}
}
}
const one = counter(0);
const two = counter(0);
console.log(one.inc());
console.log(one.inc());
console.log(one.inc());
console.log(one.inc());
console.log("---");
console.log(two.inc());
console.log(two.inc());
console.log("---");
console.log(one.inc());