gpt4 book ai didi

javascript - 显示模块模式没有设置我的私有(private)变量,为什么?

转载 作者:行者123 更新时间:2023-11-28 19:26:06 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com