JavaScript 揭示模块模式私有(private)变量状态

标签 javascript revealing-module-pattern

我最近开始从事一个 JavaScript 项目,并且来自 Java 世界,有时事情看起来很奇怪,这并不奇怪。

我正在实现一个简单的模块(使用揭示模块模式,据我所知),它将提供基于初始化的配置,但请注意,在 init() 中分配了“本地”变量 domain 函数的值会有所不同,具体取决于它是通过“getter”函数 getDomain() 访问,还是直接通过模块“public”API 公开的 domain 变量访问。

请参阅以下演示该问题的精简代码。

var ConfigManager = (function() {

  var privateDomain = 'default';

  function init(dom) {
    privateDomain = dom;
  }

  function getDomain() {
    return privateDomain;
  }

  return {
    init: init,
    domain: privateDomain,
    getDomain: getDomain
  };

})();

console.log(ConfigManager.domain); // Prints 'default'
console.log(ConfigManager.getDomain()); // Prints 'default'

ConfigManager.init('new domain');

console.log(ConfigManager.domain); // Prints 'default' <-- What??
console.log(ConfigManager.getDomain()); // Prints 'new domain'

此时我很困惑,从 getter 函数返回的变量在直接访问时如何可以具有不同的值?

比你提前!

最佳答案

由于 privateDomain 是一个字符串,因此您不是复制/返回引用,而是复制/返回值。

因此,当您使用 init 函数更改域时,它只会更新 privateDomain,因为 domain 没有指向其他域的链接而不是复制品。

希望对您有帮助! :)

关于JavaScript 揭示模块模式私有(private)变量状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51517822/

相关文章:

javascript - 使用 jQuery 确定 'Revealing Module Pattern' 模块的范围

Javascript:为什么 "texture"参数未定义?

javascript - 通过 node-http-proxy 持久化基于 cookie 的 session

javascript - 使用 RequireJS 在 JavaScript 中实现 AMD

javascript - 为什么我们在揭示模块模式中使用自执行函数?

javascript - 试图理解这个函数定义的行为

javascript - 确定数组中的所有对象是否具有匹配参数

javascript - JS HTML5 拖放 : Custom Dock Effect Jumping Around in Chrome

javascript - 如何使我的 JavaScript 代码更加动态和可扩展

javascript - 在揭示模块模式中从模块函数显式访问模块 var