我最近开始从事JavaScript项目,并且从Java世界中获得的东西有时似乎很奇怪。
我正在实现一个简单的模块(使用显示模块模式,afaik),该模块将基于初始化提供配置,但是请注意,在domain
函数中分配了“本地”变量init()
后,其值有所不同取决于是通过“ getter”函数getDomain()
还是直接通过domain
变量(通过模块“ public” API公开)访问它。
请参阅以下精简的代码来演示此问题。
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函数返回的变量在直接访问时如何具有不同的值?
比你提前!
答案 0 :(得分:2)
由于@Query( value = "select count(*) from image_set b where b.camera_id = ?2", nativeQuery = true)
fun countByTableIdAndImageSetTimeBetween(tableId: Long, cameraId: Long, fromDateTime: LocalDateTime, toDateTime: LocalDateTime): Long
是字符串,因此您不是在复制/返回引用,而是在复制值。
因此,当您使用privateDomain
函数更改域时,它只会更新init
,因为privateDomain
除了作为副本外没有与其链接。
希望有帮助! :)
答案 1 :(得分:1)
这是因为当返回域时,它的值仍然是“默认”。这是Javascript的工作方式,更多信息请点击:Javascript by reference vs. by value
但是当您使用函数“ getDomain”时,您将获得更新后的值。
还可以查看get / set语法:Getter