在揭示模块模式中公开私有变量
-
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