2017-03-23 3 views
0

私は、次のグローバルJSモジュールを持っている:このシナリオでjsゲッターを実装するためのエレガントな方法は何ですか?

var globals = (function(){ 
    var selectedReportPeriodId = 2; 
    return{ 
     SelectedReportPeriodId : selectedReportPeriodId 
    }; 
})(); 

私のコード・セットは、ユーザーが選択したレポート期間のオプションに基づいてSelectedReportPeriodId。

if(globals.IsCurrentReportPeriod) 
{ 
    //do this 
} 

エレガントな方法だろう何を:私はこのようなゲッターを呼び出すために、下流のコードを希望

function IsCurrentReportPeriod() 
{ 
    return selectedReportPeriodId === 1 
} 

:私は、機能的には、このように動作します。このモジュールにjsのゲッターを追加します上記のjsモジュールでゲッターとしてこれを実装するには?

UPDATE#1

私はこのように実装してみました:

var globals = (function(){ 

    var selectedReportPeriodId; 

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

私は前のコードでglobals.SelectedReportPeriodId = 1を設定しています。また、メソッドにブレークポイントを設定し、globals.SelectedReportPeriodIdのウォッチを1に設定します。ただし、globals.IsCurrentReportPeriodはこのコードの下の行にfalseを返し、定義されたゲッターが期待通りに動作しないように見えます。助言がありますか?

UPDATE#2

selectedReportPeriodIdは、2の値が、私は、これはゲッターが更新された値であっても後selectedReportPeriodId = 2ではなく1見ている理由であり得ることを推測していると初期化されますセット。これには良い解決策はありますか?私はselectedReportPeriodIdのゲッターを作るべきですか?ハードコードされた値で初期化するのではなく、いくつかの条件付きロジックを行うのですか?

答えて

0
return{ 
     SelectedReportPeriodId : selectedReportPeriodId, 
     IsCurrentReportPeriod : function() { 
      return selectedReportPeriodId === 1 
     } 
}; 

しかし、あなたの呼び出しは次のようになりする必要があります:

if (globals.IsCurrentReportPeriod()) { 
} 
+0

おかげでスティーブが、私はことを好むだろうこのシナリオのプロパティを使用する – details1

+0

「プロパティ」と「ゲッター」は互いに排他的です。ゲッターは定義上、関数です。プロパティを使用する必要がある場合は、例のためにさらに情報が必要です。 "SelectedReportPeriodId"プロパティの変更をトリガするイベント中に、条件に基づいて新しいプロパティを設定する必要があります。両方のプロパティを設定します(これもエレガントではなく、過剰な結合です)。そうでなければ、私の例のようなエレガントなgetter(私があなたが尋ねたと思う)のような関数を使い、JSが設計されています。 –

0

最も簡単でシンプルなソリューションがあなたのコードではなくselectedReportPeriodId変数のglobals.IsCurrentReportPeriodプロパティを設定できるようになります。しかし、あなたは絶対にゲッターを使用する必要がある場合は、あなたがそうすることができます。

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

あなたが作成したモジュールのこの方法を試すことができます。

var Globals = Globals || {}; 
 

 
(function(exports) { 
 
    var selectedReportPeriodId = 1, 
 
     otherPrivateVariable = 'private !'; 
 
    
 
    exports.getIsCurrentReportPeriod = function() { 
 
    return (selectedReportPeriodId === 1); 
 
    }; 
 

 
    function thisIsAPrivateMethod() { 
 
    } 
 

 
})(Globals); 
 

 
alert(Globals.getIsCurrentReportPeriod())

関連する問題