Dateをプロトタイプ汚染から守るExDate

というJavaScriptのライブラリを作りました。
GitHub - monjudoh/ExDate: JavaScript Date class wrapper for using conbination with Date libraly which leads to prototype pollution.

何をするライブラリか

ExDateというclassを定義しています。
やっていることは、インスタンスを作成すると同じコンストラクタ引数でDate objectを作成し、
内部に抱えて、Date objectのメソッドを呼ばれると処理を丸投げするだけです。

何が嬉しいのか

Datejs(GitHub - datejs/Datejs: A JavaScript Date and Time Library)という大変使い勝手のいいライブラリがあるのですが、
Date,Date.prototypeを自重なく汚染していて、使用がためらわれます。
何がまずいかというと今後JavaScript標準のDateにメソッドが増えてきても、
関係なく上書きしてしまい正しく動作しなくなってしまいますし、
実際ECMAScript5のDate.nowメソッドは上書きされてしまっていました。
プロトタイプ変更の対象をDateからExDateにすれば安全に使用できます。

使い方

  1. ExDateを読み込む
  2. Dateをバックアップした上で、ExDateと差し替える
    • originalDate=Date;Date=ExDate;
  3. Date,Date.prototypeを汚染するライブラリを読み込む
  4. バックアップから元のDateを戻す
    • Date=originalDate;

これをやれば、ExDateで各種ライブラリによるDate拡張の機能を使えるようになります。


Datejsと組み合わせた場合のデモもGithubに上げてあるので、
cloneして試してみてください。