フツーって言うなぁ!

フツーなサラリーマンのフツーな嘆き.

「オブジェクト指向JavaScript」を読んだ

現在,研究用のプログラムでフロントエンドにJavaScriptを扱っています.

JavaScript自体(jQuery含む)は何度か書いたことがあるのですが,正直,「動けばいい」ぐらいの気持ちで書いたものばかりで,しっかりと設計をしたことはありませんでした.

実際,JavaScriptについて書かれた本は数多くありますが,Webデザイナ向けの平易な本がほとんどで,JSの言語仕様やベストプラクティスなどに踏み込んだ本はそう多くないような気がします.
この機会に一度勉強しておこうと思っていたところで,図書館に下記の本があったので,これを読むことにしました.

オブジェクト指向JavaScript

オブジェクト指向JavaScript

簡単なメモ

1章

「イントロダクション」として,JSとオブジェクト指向についての説明が記載されている.

2章

JSのデータ構造,制御構造について書かれている.

多くは他の言語にもある仕様で,すでに知っていたが,"=="と"==="の違いや,"undefined"の扱い,変数宣言時に"var"をつける/つけないによって変数がローカル/グローバルになる,など,JS独特の言語仕様に驚くところも多々あった.

3章

関数についての内容.

「JSの関数はオブジェクトである」というところから,無名関数,自己実行可能関数,クロージャなど,「Webページを読んでいると見かけるけどよくわからない」ようなJSの文法についての説明があった.
「JSではスコープが関数単位で設定されている」というのが個人的には驚きだった*1
クロージャについては,一度読んだだけでは必要性を感じることが出来なかったので,もう一度勉強し直そうと思う.

4章

実際にJSでオブジェクトを生成するにはどうすればいいかについての記載.

JSではプロパティにアクセスすることでオブジェクト固有の値やメソッドにアクセスできるといった話や,コンストラクタ関数とnewキーワードによってユーザ定義のオブジェクトを生成することができるといった話があった.

「JSはプロトタイプベースのオブジェクト指向言語」ということは知識として知っていたが,実際に言語仕様を見てみると,クラスベースの言語との違いに戸惑った.

5章

プロトタイプについての話.

JSの関数オブジェクトには,オブジェクト自身のプロパティとは別に,「prototype」と呼ばれるプロパティを持っており,オブジェクトからこの値をたどることができる.
プロトタイプはコンストラクタ関数を用いて新たなオブジェクトを生成した時にも用いることができる.
などといったことが書いてあった.

この辺からは難しくてなかなか読み進めることが出来なかった.

6章

継承についての話.

JSでは,プロトタイプチェーンと呼ばれる,オブジェクトのプロトタイプ間に定義されるリンク構造を用いて,子オブジェクトのプロトタイプを親オブジェクトのコンストラクタ関数から生成されるオブジェクトに置き換えることで継承を実装する.
子オブジェクトのあるプロパティを呼ぶと,処理系は,まず子オブジェクト自身のプロパティを探し,なければプロトタイプチェーンをたどって親オブジェクトのプロパティを探す,という動きになる.

最後のケーススタディはわりとわかりやすかった.

7章

実際にJSをブラウザで使う際の注意点についての記述.

この辺は何度か開発をしたことがあるので知っていることも多かった*2

8章

JS固有のコーディングテクニックと,デザインパターンの実装についての話.

グローバル変数の数を減らすために,大きなオブジェクトを作ってその中に名前空間を定義するという手法は面白かった.
実際に飲み込むまでには時間がかかりそう.


全体的に,コード例が充実しており,実際に試すまでもなくわかるような作りになっていました.
オブジェクト指向」と題してあるので,もう少しオブジェクト指向を用いてどのような実装をすればいいのかの例について記載されているとよかったのかなと思います.

*1:これが諸悪の根源な気がする

*2:日本語版は2012年発行だったので,わりと新しい本なのかと思っていたが,この辺の記述を読む当たり,原著は若干古い本かもしれないと思った