JavaScript模块模式,将修改后的私有变量作为公共变量获取

huangapple go评论82阅读模式
英文:

Javascript Module Pattern, get modified private variable as public

问题

Sure, here's the translated code part:

  1. 你能告诉我如何将修改后的私有变量变为公共的吗
  2. let Module = (function(){
  3. let privateObject = {};
  4. function init(){
  5. privateObject = {test:true}
  6. }
  7. return {
  8. init,
  9. privateObject
  10. }
  11. })();
  12. Module.init();
  13. console.log(Module.privateObject);
  1. 我尝试过类似这样的方法但我相当确定我漏掉了某些东西
  2. let Module = (function(){
  3. function init(){
  4. publicObject.privateObject.test = true;
  5. }
  6. let publicObject = {
  7. privateObject: {},
  8. init
  9. }
  10. return publicObject;
  11. })();
  12. Module.init();
  13. console.log(Module.privateObject); // 输出 {test: true}

注意:这里的翻译只包括代码部分,不包括问题或其他内容。

英文:

Can you tell me how to get modified private variable as public?

<!-- begin snippet: js hide: false console: true babel: false -->

<!-- language: lang-js -->

  1. let Module = (function(){
  2. let privateObject = {};
  3. function init(){
  4. privateObject = {test:true}
  5. }
  6. return {
  7. init,
  8. privateObject
  9. }
  10. })();
  11. Module.init();
  12. console.log(Module.privateObject);

<!-- end snippet -->

I've tried something like this but I am pretty sure that I'm missing something.

  1. let Module = (function(){
  2. function init(){
  3. publicObject.privateObject.test = true;
  4. }
  5. let publicObject = {
  6. privateObject: {},
  7. init
  8. }
  9. return publicObject;
  10. })();
  11. Module.init();
  12. console.log(Module.privateObject); // gives {test: true}

答案1

得分: 1

谢谢您的评论。

我已经理解了为什么在赋新值之后
privateObject = {test:true}

Module.privateObject返回了一个空对象,因为Module.privateObject保留了对privateObject先前值的引用。感谢@jabaa

作为问题的解决方案,以下代码完美运行

  1. let Module = (function(){
  2. let privateObject = {};
  3. function init(){
  4. privateObject = {test:true}
  5. }
  6. function getPrivate(){
  7. return privateObject;
  8. }
  9. return {
  10. init,
  11. getPrivate
  12. }
  13. })();
  14. Module.init();
  15. console.log(Module.getPrivate());
英文:

Thank you for your comments.

I already understand why with a new assignment of value
privateObject = {test:true}

Module.privateObject returned an empty object because Module.privateObject kept a reference to the previous value of privateObject. Thanks @jabaa

As a solution to the problem for the posterity, the following code works like a charm

<!-- begin snippet: js hide: false console: true babel: false -->

<!-- language: lang-js -->

  1. let Module = (function(){
  2. let privateObject = {};
  3. function init(){
  4. privateObject = {test:true}
  5. }
  6. function getPrivate(){
  7. return privateObject;
  8. }
  9. return {
  10. init,
  11. getPrivate
  12. }
  13. })();
  14. Module.init();
  15. console.log(Module.getPrivate());

<!-- end snippet -->

huangapple
  • 本文由 发表于 2023年4月19日 22:39:49
  • 转载请务必保留本文链接:https://go.coder-hub.com/76055805.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定