Javascript 什么';在这个场景中,实现js getter的优雅方式是什么?

Javascript 什么';在这个场景中,实现js getter的优雅方式是什么?,javascript,Javascript,我有以下globals js模块: var globals = (function (){ var selectedReportPeriodId = 2; return{ SelectedReportPeriodId : selectedReportPeriodId }; })(); 我的代码根据用户选择的报告周期选项设置SelectedReportPeriodId。我想在此模块中添加一个js getter,其功能如下: function IsCurrentRe

我有以下globals js模块:

var globals = (function (){
   var selectedReportPeriodId = 2;
   return{
      SelectedReportPeriodId : selectedReportPeriodId 
   };
})();
我的代码根据用户选择的报告周期选项设置SelectedReportPeriodId。我想在此模块中添加一个js getter,其功能如下:

function IsCurrentReportPeriod()
{
   return selectedReportPeriodId === 1
}
if(globals.IsCurrentReportPeriod)
{
   //do this
}
var globals = (function (){

   var selectedReportPeriodId;

   return{
      SelectedReportPeriodId : selectedReportPeriodId,
      get IsCurrentReportPeriod() {
         return selectedReportPeriodId == 1;
      }
   };
})();
if (globals.IsCurrentReportPeriod()) {
}
我希望下游代码像这样调用getter:

function IsCurrentReportPeriod()
{
   return selectedReportPeriodId === 1
}
if(globals.IsCurrentReportPeriod)
{
   //do this
}
var globals = (function (){

   var selectedReportPeriodId;

   return{
      SelectedReportPeriodId : selectedReportPeriodId,
      get IsCurrentReportPeriod() {
         return selectedReportPeriodId == 1;
      }
   };
})();
if (globals.IsCurrentReportPeriod()) {
}
在上面的js模块中,作为getter实现这一点的优雅方式是什么

更新#1

我尝试这样实现:

function IsCurrentReportPeriod()
{
   return selectedReportPeriodId === 1
}
if(globals.IsCurrentReportPeriod)
{
   //do this
}
var globals = (function (){

   var selectedReportPeriodId;

   return{
      SelectedReportPeriodId : selectedReportPeriodId,
      get IsCurrentReportPeriod() {
         return selectedReportPeriodId == 1;
      }
   };
})();
if (globals.IsCurrentReportPeriod()) {
}
我正在前面的代码中设置globals.SelectedReportPeriodId=1。我还在一个方法中设置了一个断点,并设置了一个globals.SelectedReportPeriodId的监视,它返回1。但是,globals.IsCurrentReportPeriod在代码下面的行中返回false,因此我定义的getter似乎没有按预期工作。有什么建议吗

更新#2

selectedReportPeriodId用值2初始化。我猜这可能是getter看到selectedReportPeriodId=2而不是1的原因,即使在设置了更新的值之后也是如此。解决这个问题的好办法是什么?我是否也应该为selectedReportPeriodId创建一个getter,它执行一些条件逻辑,而不是使用硬编码值初始化

return{
      SelectedReportPeriodId : selectedReportPeriodId,
      IsCurrentReportPeriod : function () {
          return selectedReportPeriodId === 1
      }
};
但您的电话必须如下所示:

function IsCurrentReportPeriod()
{
   return selectedReportPeriodId === 1
}
if(globals.IsCurrentReportPeriod)
{
   //do this
}
var globals = (function (){

   var selectedReportPeriodId;

   return{
      SelectedReportPeriodId : selectedReportPeriodId,
      get IsCurrentReportPeriod() {
         return selectedReportPeriodId == 1;
      }
   };
})();
if (globals.IsCurrentReportPeriod()) {
}

最直接、最简单的解决方案是让代码设置
globals.IsCurrentReportPeriod
属性,而不是
selectedReportPeriodId
变量。但如果您必须使用getter,您可以这样做:

var globals = (function (){
    var selectedReportPeriodId;
    return {
        get IsCurrentReportPeriod() {
            return selectedReportPeriodId === 1;
        }
    };
})();

您可以尝试以下方式创建模块:

var Globals=Globals | |{};
(职能(出口){
var selectedReportPeriodId=1,
otherPrivateVariable='private!';
exports.getIsCurrentReportPeriod=函数(){
return(selectedReportPeriodId==1);
};
函数thisisPrivateMethod(){
}
})(全球);

alert(Globals.getIsCurrentReportPeriod())
谢谢steve,但我更喜欢在这个场景中使用属性“属性”和“getter”是互斥的。根据定义,getter是一个函数。如果您必须使用属性,我们需要更多信息作为示例。在触发“SelectedReportPeriodId”属性更改的事件期间,需要根据您的条件设置新属性。设置这两个属性(也不是优雅的,是过度耦合的)-否则使用一个函数,如我的示例中所示,它是优雅的,并且是getter(这是我认为您要求的),并且与JS的设计方式非常一致。