我试图实施一个愚蠢的代码,一个拥有私人代码的基础对象。 member(闭包变量),以及基于该对象的两个对象。看来两个对象操纵相同的闭包变量
Obj = (function(){
var count = 0;
function getCount(){
return count;
}
function setCount(c) {
count = c;
}
return {
getCount : getCount,
setCount : setCount
}
}());
obj1 = Object.create(Obj);
obj2 = Object.create(Obj);
obj1.setCount(10);
obj2.getCount(); // 10? that's.. not so good
所以,我原来的Obj代码只执行一次,这有点解释了。
我的问题:
有没有任何方法可以保持私人'从闭包创建多个对象时变量?我无法找到任何聪明的解决方法,我希望避免将该变量设置为可公开访问。
答案 0 :(得分:2)
这里有你所拥有的
+-------+\
| obj1 | \
+-------+ \ +-------+---getCount---\
| Obj | var count
+-------+ / +-------+---setCount---/
| obj2 | /
+-------+/
这两个对象共享一个公共原型Obj
,它有两种方法都可以访问相同的count
变量。
你想要的是拥有两个单独的count
变量和一个单独的Obj
,每个变量都有自己的方法,这些方法关闭count
。
要做到这一点,只需将IIFE功能转换为命名功能,然后抛弃Object.create
。
function Obj(){
var count = 0;
function getCount(){
return count;
}
function setCount(c) {
count = c;
}
return {
getCount : getCount,
setCount : setCount
}
}
obj1 = Obj();
obj2 = Obj();
obj1.setCount(10);
obj2.getCount(); // 0
现在你有了这个:
+-------+---getCount---\
| obj1 | var count
+-------+---setCount---/
+-------+---getCount---\
| obj2 | var count
+-------+---setCount---/