Раскройте частные переменные в шаблоне раскрытия модуля
-
12-12-2019 - |
Вопрос
Я пытаюсь реализовать шаблон раскрывающегося модуля, но не могу предоставить измененную частную собственность.
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".
Решение
return {
fullName: name,
set: setName
};
Для этого используется ценности из name
и setName
.Он не создает ссылку на переменную.Эффективно, name
копируется.
Вам необходимо создать соответствующий getName
метод, чтобы воспользоваться преимуществами замыканий и сохранить ссылку на переменную.
Другие советы
var myRevealingModule = (function(){
var name = 'Diogo';
function setName () {
name = name + ' Cardoso';
};
function getName () {
return name;
};
return {
fullName: name,
set: setName,
get: getName
};
}());
.
Если ваше значение является атрибутом в объекте или массиве, вы можете экспортировать объект или массив, а экспорт будет со ссылкой, поэтому внешние пользователи увидят обновленные изменения.Это немного рискованно, поскольку общий рисунок экспортирующих переменных имеет скалярную / объектную копию / справочную дихотомию.
Не связан с StackOverflow