Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript显示模块模式私有变量状态_Javascript_Revealing Module Pattern - Fatal编程技术网

JavaScript显示模块模式私有变量状态

JavaScript显示模块模式私有变量状态,javascript,revealing-module-pattern,Javascript,Revealing Module Pattern,我最近开始从事一个JavaScript项目,来自Java世界,有时事情看起来很奇怪,这并不奇怪 我正在实现一个简单的模块(使用显示模块模式afaik),它将根据初始化提供配置,但请注意,在init()函数中分配了一个“局部”变量domain后,它的值会因是否通过“getter”函数getDomain()访问而不同或直接通过域变量通过模块“公共”API公开 请参阅下面演示此问题的精简代码 var ConfigManager=(函数(){ var privateDomain='default';

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

我正在实现一个简单的模块(使用显示模块模式afaik),它将根据初始化提供配置,但请注意,在
init()
函数中分配了一个“局部”变量
domain
后,它的值会因是否通过“getter”函数
getDomain()访问而不同
或直接通过
变量通过模块“公共”API公开

请参阅下面演示此问题的精简代码

var ConfigManager=(函数(){
var privateDomain='default';
函数初始化(dom){
privateDomain=dom;
}
函数getDomain(){
返回私有域;
}
返回{
init:init,
域名:privateDomain,
getDomain:getDomain
};
})();
console.log(ConfigManager.domain);//打印“默认值”
console.log(ConfigManager.getDomain());//打印“默认值”
ConfigManager.init(“新域”);

console.log(ConfigManager.domain);//打印“default”因为
privateDomain
是一个字符串,所以您没有复制/返回引用,而是复制/返回值

因此,当您使用
init
函数更改域时,它只会更新
privateDomain
,因为
domain
除了作为副本之外没有指向它的链接


希望有帮助!:)

这是因为当返回域时,它的值仍然是“默认值”。这是Javascript的工作原理,更多信息请参见:

但是当您使用函数“getDomain”时,您将获得更新的值


还可以查看get/set语法:

Ahh。。。我懂了。我知道javascript是通过值传递的(与Java相同),但我认为既然字符串是对象,它们的变量将指向同一个字符串对象。我可能应该进一步研究JS中如何处理字符串。谢谢。@Konaras这是一次学习之旅,我也从Java开始。这种差异有时令人困惑。很高兴我能帮忙!:)另外,由于其偶尔的“怪异”,JS只是更强大,至少从我的角度来看是这样。是的,这似乎也是正确的答案。谢谢还感谢大家对getter语法的了解,这似乎正是我所需要的!