Help us understand the problem. What is going on with this article?

【JavaScript】モジュール化してみたい

More than 5 years have passed since last update.

JavaScriptでのモジュール化

モジュールを作成しておけば、その内部状態や実装について隠蔽した上で機能のみを提供できる。
JavaScriptでは関数を利用することで、モジュールを作成することが可能となる。

例)日付演算モジュール
var dateCalculator = function() {
  var year = 0,
      month = 0,
      day = 0;
  return {
    setYear: function(y) {
      year = y;
    },
    setMonth: function(m) {
      month = m;
    },
    setDay: function(d) {
      day = d;
    },
    // 表示
    printDate: function() {
      console.log(year + '' + month + '' + day + '');
    },
    // うるう年判定
    isLeapYear: function() {
      return ((year%4===0 && year%100!==0) || year%400===0);
    },
    // 月末日計算
    getLastDay: function() {
      var date = new Date(year, month, 0);
      return date.getDate();
    }
  };
};

var calc = dateCalculator();
calc.setYear(2014);
calc.setMonth(2);
calc.setDay(1);
calc.printDate(); // 出力:2014年2月1日
console.log(calc.isLeapYear()); // 出力:false
console.log(calc.getLastDay()); // 出力:28

// year, month, dayを直接参照することはできない
console.log(calc.year); // 出力:undefined
console.log(year); // エラー:year is not defined

dateCalculatorは、関数式の返却値としてセッターメソッドや日付演算を行うメソッド群をプロパティとしたオブジェクトを受け取っており、それらのプロパティへアクセスが可能である。
しかし、受け取ったオブジェクト内にはyear, month, dayといったプロパティは存在しないため、アクセスしてもundefinedと出力される。

最後に...

日付関連の演算をする上で、以下のエントリが非常に参考になりました。
JavaScriptによる日付・時刻・時間の計算・演算のまとめ

route06
DXに関する戦略コンサルティング/デジタルプロダクト開発/データプラットフォーム統合などのご支援をさせていただいております。 2020年5月に資金調達をし、本格的に動き出したところで、全職種募集しています。フルリモートワークで全国各地から働けます。ご興味・ご関心のある方がいらっしゃいましたら、お気軽にご連絡ください。現在はカジュアル面談大歓迎です!
https://route06.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした