「JavaScript Ninjaの極意」を読んだ

日本語版が出る前から話題になっていたのを見ていて、英語だけど買おうかなーと思っていたら翻訳されて発売されたので買いました。


かなり話題になるかなと思っていたら、意外とそうでもなく、でも読んで見るとやっぱり面白かったので紹介します。
というか、jQuery作者のJohn Regigによる本ということで読むしかない!


入門書ではないものの、最初はかなり簡単な内容から始まって、assert関数を作ってそれを実際に使いながら動作を説明していく流れになっています。
基本的にはコードを示してそれについての説明をしていくスタイルになっていて、コードにもコメントが丁寧に付けられていてわかりやすいです。
また、何か実装を示すときに、使う側のコードから見せて、その実装を後で示すのも興味をそそられていいです。

関数

  • 最初が関数についての説明になっていて、コンストラクタについての説明やapply, call、無名関数の使い方や、プロパティを使ったメモ化、argumentsの使い方などなど色々な使い方を知ることが出来ます。
    • 個人的には、function.lengthとaruguments.lengthを使ったオーバーロードの実装がなるほどなぁと思い面白かったです。
    • 特に同じ引数を持つメソッドを探索していくコードが。

クロージャ

  • クロージャについても知らない人向けに丁寧に説明されていてわかりやすいです。
    • クロージャを使うことによってイベント駆動なコードを書きやすくなっていることや、bindやcurry化、メモ化などこの辺りから少しずつ考えて読むコードが増えてきます。
  • 即時関数を使って長いプロパティを省略するのはそんなに意識していなかったのですが、確かに便利だなと思いました。
(function(v) {
  v.value ...
})(element.someLongAttribute);

プロトタイプ

  • ここも丁寧に説明されていてわかりやすいですが、obj.constructor.prototypeとなっているからprototypeに追加したメソッドを探せるとあるけどそこはアレッ?と思いました。obj.__proto_みたいな内部プロパティにprototypeがセットされて、そこから探せるようになってるんだと思っていたので。
    • 確認してみた(実装によるのかもしれませんが..)

  • Ninja.prototype = Person.prototypeでなくて、Ninja.prototype = new Person()にした方が理由なんかもしっかり書かれているのもいいなと思いました。
  • クラスぽいのをつくるsubClass関数の実装はだいぶ手強い感じでした。実装は1ページ分くらいですが、その実装についての説明は5ページくらいあってかなり勉強になります。
    • 全部理解出来ていませんが...

正規表現

  • 忍び袋に入れておくべき武器として紹介されていて、html文字列の正規表現による操作を中心に比較的基本的な使い方が紹介されています。//リテラルではなくて、new Regex()を使うべき場面など、いい頭の体操になって読んでいて面白かったです。

スレッドとタイマ

  • メインの処理と、マウスイベント、setTimeout、setIntervalが起こった時に、遅延しながらどのように実行されていくかの図が最初に紹介されるのですが、それがとてもわかりやすいです。
  • setTimeoutを繰り返し実行した時とsetIntervalとの違いについても書かれていてなるほどなぁと思いました。
  • また重い処理でUIを止めないために、setTimeout使うなど、シングルスレッドならでは注意点についてもしっかり書かれています。
  • とてもいい章だと思います。

実行時のコードの評価

  • ここではevalについてや、Function.toString()を使った引数名の取り方などが紹介されています。
  • またテンプレートエンジンの実装などで使われてるwithについても一章使って取り上げられており、改めてその動作について知ることが出来ます。
    • 実際は使わないと思いますが...

クロスブラウザ

  • ここからはjQueryでの開発の経験をもとに、クロスブラウザ対応についてかなり詳しく書かれていて、紹介されるコードの内容も高度になってきます。
    • 理解出来なかったところも結構あります。
    • これを見たらjQueryに足を向けて寝れないなと思いました。
    • どのブラウザでも動くようにするだけでなく、パフォーマンスや様々なことを考慮していることがわかり、とても読み応えがありました。

ちなみに洋書の方は、「それはサムライでは?」という表紙でしたが、日本語版ではちゃんと忍者なかっこいい感じになってます