我正在尝试实现Revealing Module Pattern,但我无法公开修改过的私有属性。
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".
答案 0 :(得分:21)
return {
fullName: name,
set: setName
};
使用name
和setName
的值。它不会创建对变量的引用。实际上,name
被复制。
您需要创建相应的getName
方法,以利用闭包,以便您可以保留对变量的引用。
答案 1 :(得分:13)
var myRevealingModule = (function(){
var name = 'Diogo';
function setName () {
name = name + ' Cardoso';
};
function getName () {
return name;
};
return {
fullName: name,
set: setName,
get: getName
};
}());
答案 2 :(得分:0)
如果您的值是对象或数组中的属性,则可以导出对象或数组,并且导出将通过引用进行,因此外部用户将看到更新的更改。由于导出变量的通用模式具有标量/对象复制/引用二分法,因此风险很小。