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?
Как вы можете видеть из вышеперечисленного, вещь.c (последняя строка) возвращается черным, но почему не коричневый? Почему изменения не сохраняются? Что мне не хватает?Выявление шаблона модуля не устанавливает мою приватную переменную, почему?
EDIT:
См 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
Что здесь происходит?
Вы назначаете 'c' только один раз и не используете аксессор. –