Posted at

JavaScriptのオブジェクト指向

More than 1 year has passed since last update.

JavaScript本格入門の内容を自分用にメモ


JavaScriptは「クラス」ではなく「プロトタイプ」

JavaScriptはオブジェクト指向言語だが、JavaやC++といったオブジェクト指向言語とは根本的な違いがある。

それは、インスタンス化という概念はあるが、いわゆる「クラス」がなく、「プロトタイプ」という概念だけが存在する点。

プロトタイプとは、「あるオブジェクトの元となるオブジェクト」のこと。JavaScriptではクラスの代わりにプロトタイプを利用して新たなオブジェクトを生成していく。


シンプルなプロトタイプ(いわゆるクラス)を定義してみる

# 空のプロトタイプを定義

var Member = function() {};
# new演算子でインスタンス化
var mem = new Member();

変数Memberに対して空の関数リテラルを代入しているだけのように見えるが、これがJavaScriptのプロトタイプ(いわゆるクラス)。

つまり、

JavaScriptでは関数(Functionオブジェクト)にクラスとしての役割を与えている

これは、「プロトタイプ」 = 「あるオブジェクトの元のオブジェクト」の定義から考えると、JavaScriptではFunctionオブジェクトを元にオブジェクトが作成されていると解釈できるので、プロトタイプの理解がしやすい。