ここのところいろいろバタバタしたり体調崩したりで久々の更新になってしまった(>_<)
前回こちらでPHPのオブジェクト指向について取り扱ったので、今回はJavaScriptのオブジェクト指向について簡単に説明してみます。
JavaScriptのオブジェクト指向で、最も特徴的なのはプロトタイプベースということでしょう。C++やJava、PHPやRubyなどのほとんどのオブジェクト指向言語はクラスベースなので、その辺の違いに戸惑う人は結構多いと思います(僕もそうでした)。
クラスベースのオブジェクト指向言語では最初にクラスを定義して、その中にプロパティやメソッドを定義していくのですが、JavaScriptではオブジェクトはプロパティと値の組み合わせで表現されます。値には数値(Number)、文字列(String)、論理値(Boolean)といった基本型(プリミティブ型ともいう)もしくは別のオブジェクトが入ることになります。
例えば、こんな感じです。
var person = { name : 'Yusuke', age : 37, home : 'Tokyo' }
プロトタイプベースと聞くと「何だそりゃ?」と思うかもしれないですが、基本的にはハッシュテーブルみたいなものと考えておけばそんなに間違いはないかなと思います。
プロパティの値を確認したいときは、
console.log(person.name); // Yusukeと帰ってくる
とすればいいことになります。
これを見ると気がつくかもしれませんが、JavaScriptの標準で用意されているconsoleも実はオブジェクトです。これ以外にも、よく見るdocumentとかwindowなんかもオブジェクトです。なので、JavaScriptでは基本的にほとんどのものはオブジェクトとして扱うことができるのです。
オブジェクトの中身は簡単に書き換えることができます。例えば、
person.age = 25;
とすればpersonオブジェクトのageプロパティの値が37から25に変更されます。
また、新しいプロパティを追加することも同様にすぐできます。
person.occupation = 'programmer';
とすれば、personオブジェクトに新たにoccupationというプロパティが定義されます。
オブジェクトのプロパティを削除するときは、deleteを使います。
delete person.home;
とすると、homeプロパティが削除されます。削除した後にアクセスしようとすると、undefinedになります。
後、一つ重要なのは「JavaScriptでは関数もオブジェクト」ということです。
例えば、toDouble(n)という2倍の値を返す関数があったとします。
普通はこう書きます。
function toDouble(n) { return 2 * n; } console.log(toDouble(4)); //8
しかし、これをオブジェクトのように書くと、こうなります。
var toDouble = function(n) { return n * 2; } console.log(toDouble(4)); //8
まだまだ説明が不十分だったり書き足りなかったりするところも多々あるけど、基本的にブログ更新はあまり時間をかけすぎないようにしているので、どこかでJavaScriptのオブジェクト指向 その2をやろうと思います。