im使用了稍微修改的显示模块模式,并且在模块内部对其进行更改后获取公共变量值存在一些问题。让我们来看看。 简单模块:
const MyModule = (function() {
let _pretendsToBePublic = '';
const _module = {
publicVariable: _pretendsToBePublic,
init() {
_pretendsToBePublic = 2;
},
change(val) {
_pretendsToBePublic = val;
}
};
return _module;
})();
MyModule.init();
console.log(MyModule.publicVariable); // ''
MyModule.change(333); //still ''
console.log(MyModule.publicVariable);
我想念什么吗?
答案 0 :(得分:2)
如果您希望普通引用 MyModule.publicVariable
返回私有_pretendsToBePublic
,则需要将其设置为 getter :< / p>
const MyModule = (function () {
let _pretendsToBePublic = '';
const _module = {
get publicVariable() {
return _pretendsToBePublic;
},
init() {
_pretendsToBePublic = 2;
},
change(val) {
_pretendsToBePublic = val;
}
};
return _module;
})();
MyModule.init();
console.log(MyModule.publicVariable) // 2
MyModule.change(333);
console.log(MyModule.publicVariable) // 333
或者您可以将其转换为标准函数,从而使使用者更清楚地知道您正在调用功能,而不仅仅是获取简单的属性:
const MyModule = (function () {
let _pretendsToBePublic = '';
const _module = {
getPublicVariable() {
return _pretendsToBePublic;
},
init() {
_pretendsToBePublic = 2;
},
change(val) {
_pretendsToBePublic = val;
}
};
return _module;
})();
MyModule.init();
console.log(MyModule.getPublicVariable()) // 2
MyModule.change(333);
console.log(MyModule.getPublicVariable()) // 333