function stapler() {
var color = "black";
function setColor(newColor) {
console.log(color); //2. - black
color = newColor;
console.log(color); //3. - brown
}
function displayColor() {
console.log(color);
}
return {
c: color,
set: setColor,
display: displayColor
}
}
thing = stapler();
console.log(thing.c); //1. - black
thing.set('brown');
console.log(thing.c); //4. - black, why doesn't this print brown?
从上面可以看出,thing.c(最后一行)返回的是黑色,但为什么不是棕色呢?为什么更改没有保存?我错过了什么?
编辑:
参见http://repl.it/7gs获取以下代码的工作副本。
function stapler() {
var color = "black";
function setColor(newColor) {
console.log(color); //2. - black
color = newColor;
console.log(color); //3. - brown
}
function getColor() {
return color;
}
return {
get: getColor(),
set: setColor,
}
}
thing = stapler();
console.log(thing.get); //1. - black
thing.set('brown');
console.log(thing.get); //4. - black, why isn't this brown?
最后,让这个问题变得更加复杂......看看下面的例子 -
(可在http://replit.com/7hD查看)
function stapler() {
var color = "black";
function setColor(newColor) {
console.log(color); //2. - black, 6. - brown, why now has it changed?
color = newColor;
console.log(color); //3. - brown, 7. - purple
}
function getColor() {
return color;
}
return {
get: getColor(),
set2: function(newColor) {
setColor(newColor);
},
set: setColor,
}
}
thing = stapler();
console.log(thing.get); //1. - black
thing.set('brown');
console.log(thing.get); //4. - black, why isn't this brown?
console.log(thing.get); //5. - black, why isn't this brown
console.log('-----');
thing.set2('purple');
console.log(thing.get); //8. - black
这是怎么回事?
最佳答案
您需要添加一个 getter - return {c:color/*...*/
第一次将颜色的副本放入该变量中,但它没有直接链接到内存。对私有(private) color
变量的任何更改都不会链接到 c
元素(这实际上很好 - 如果它以这种方式工作,您可以使用 从外部更改颜色thing.c='magenta';
) 相反,您需要:
function getColor() {return color; }
/*...*/
return { get: getColor, set: setColor, display: displayColor };
关于javascript - 显示模块模式没有设置我的私有(private)变量,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27865013/