Выводить частные переменные в раскрывающемся шаблоне модуля
Я пытаюсь реализовать шаблон раскрывающегося модуля, но я не могу открыть измененное частное свойство.
var myRevealingModule = (function(){
var name = 'Diogo';
function setName () {
name = name + ' Cardoso';
}
return {
fullName: name,
set: setName
};
}());
// Sample usage:
myRevealingModule.set();
console.log(myRevealingModule.fullName); // "Diogo" instead of the excepted "Diogo Cardoso".
Ответы
Ответ 1
return {
fullName: name,
set: setName
};
Использует значения name
и setName
. Он не создает ссылку на переменную. Эффективно копируется name
.
Вам нужно создать соответствующий метод getName
, чтобы воспользоваться преимуществами закрытия, чтобы вы могли сохранить ссылку на переменную.
Ответ 2
var myRevealingModule = (function(){
var name = 'Diogo';
function setName () {
name = name + ' Cardoso';
};
function getName () {
return name;
};
return {
fullName: name,
set: setName,
get: getName
};
}());
http://jsfiddle.net/yeXMx/
Ответ 3
Если ваше значение является атрибутом в объекте или массиве, вы можете экспортировать объект или массив, а экспорт будет по ссылке, поэтому внешние пользователи будут видеть обновленные изменения. Это немного рискованно, так как общий шаблон экспортируемых переменных имеет скалярную/объектную копию/ссылочную дихотомию.