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にすれば安全に使用できます。
使い方
- ExDateを読み込む
- Dateをバックアップした上で、ExDateと差し替える
- originalDate=Date;Date=ExDate;
- Date,Date.prototypeを汚染するライブラリを読み込む
- バックアップから元のDateを戻す
- Date=originalDate;
これをやれば、ExDateで各種ライブラリによるDate拡張の機能を使えるようになります。
Datejsと組み合わせた場合のデモもGithubに上げてあるので、
cloneして試してみてください。