「JavaScript Ninjaの極意」を読んだ
日本語版が出る前から話題になっていたのを見ていて、英語だけど買おうかなーと思っていたら翻訳されて発売されたので買いました。
かなり話題になるかなと思っていたら、意外とそうでもなく、でも読んで見るとやっぱり面白かったので紹介します。
というか、jQuery作者のJohn Regigによる本ということで読むしかない!
入門書ではないものの、最初はかなり簡単な内容から始まって、assert関数を作ってそれを実際に使いながら動作を説明していく流れになっています。
基本的にはコードを示してそれについての説明をしていくスタイルになっていて、コードにもコメントが丁寧に付けられていてわかりやすいです。
また、何か実装を示すときに、使う側のコードから見せて、その実装を後で示すのも興味をそそられていいです。
関数
クロージャ
- クロージャについても知らない人向けに丁寧に説明されていてわかりやすいです。
- クロージャを使うことによってイベント駆動なコードを書きやすくなっていることや、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ページくらいあってかなり勉強になります。
- 全部理解出来ていませんが...
スレッドとタイマ
- メインの処理と、マウスイベント、setTimeout、setIntervalが起こった時に、遅延しながらどのように実行されていくかの図が最初に紹介されるのですが、それがとてもわかりやすいです。
- setTimeoutを繰り返し実行した時とsetIntervalとの違いについても書かれていてなるほどなぁと思いました。
- また重い処理でUIを止めないために、setTimeout使うなど、シングルスレッドならでは注意点についてもしっかり書かれています。
- とてもいい章だと思います。
実行時のコードの評価
- ここではevalについてや、Function.toString()を使った引数名の取り方などが紹介されています。
- またテンプレートエンジンの実装などで使われてるwithについても一章使って取り上げられており、改めてその動作について知ることが出来ます。
- 実際は使わないと思いますが...