揭示模块模式
问题描述:
我试图实现透露出模块模式,但我无法暴露修改的私有财产暴露私有变量。揭示模块模式
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
};
}());
答
如果你的价值是一个对象或数组的属性,你可以导出对象或数组,出口将是引用,以便外部用户将会看到更新的变化。这是一个有点冒险,因为出口变量的一般模式有标/对象复制/参考二分法。