我有以下全局js模块:
var globals = (function (){
var selectedReportPeriodId = 2;
return{
SelectedReportPeriodId : selectedReportPeriodId
};
})();
我的代码根据用户选择的报告期间选项设置SelectedReportPeriodId。我想在这个模块中添加一个js getter,它的功能如下:
function IsCurrentReportPeriod()
{
return selectedReportPeriodId === 1
}
我希望下游代码像这样调用getter:
if(globals.IsCurrentReportPeriod)
{
//do this
}
在上面的js模块中实现这个作为getter的优雅方法是什么?
更新#1
我试图像这样实施:
var globals = (function (){
var selectedReportPeriodId;
return{
SelectedReportPeriodId : selectedReportPeriodId,
get IsCurrentReportPeriod() {
return selectedReportPeriodId == 1;
}
};
})();
我在之前的代码中设置globals.SelectedReportPeriodId = 1。我还在一个方法中设置了一个断点,并设置了一个globals.SelectedReportPeriodId的监视,它返回1.但是,globals.IsCurrentReportPeriod在这个代码下面的行中返回false,所以我定义的getter似乎没有按预期工作。有什么建议吗?
更新#2
selectedReportPeriodId初始化为值2.我猜测这可能是getter在设置更新值后看到selectedReportPeriodId = 2而不是1的原因。对此有什么好的解决方案?我是否应该为selectedReportPeriodId制作一个getter,它使用一些条件逻辑而不是用硬编码值初始化?
答案 0 :(得分:0)
return{
SelectedReportPeriodId : selectedReportPeriodId,
IsCurrentReportPeriod : function () {
return selectedReportPeriodId === 1
}
};
但你的电话必须如下:
if (globals.IsCurrentReportPeriod()) {
}
答案 1 :(得分:0)
最直接,最简单的解决方案是让代码设置globals.IsCurrentReportPeriod
属性而不是selectedReportPeriodId
变量。但如果你必须使用吸气剂,你可以这样做:
var globals = (function (){
var selectedReportPeriodId;
return {
get IsCurrentReportPeriod() {
return selectedReportPeriodId === 1;
}
};
})();
答案 2 :(得分:0)
您可以尝试这种创建模块的方式:
var Globals = Globals || {};
(function(exports) {
var selectedReportPeriodId = 1,
otherPrivateVariable = 'private !';
exports.getIsCurrentReportPeriod = function() {
return (selectedReportPeriodId === 1);
};
function thisIsAPrivateMethod() {
}
})(Globals);
alert(Globals.getIsCurrentReportPeriod())