
JavaScriptも「オブジェクト指向プログラミング言語」の一つです。
ただ、JavaやC++のような本格的なオブジェクト指向を取り入れているのではなく、オブジェクト指向の基本的な機能のみを取り入れています。
基本的な、オブジェクトの種類についてご紹介させていただきます。
オブジェクトの種類
JavaScriptのオブジェクトは大きく、下記の種類に分かれます。
- 組み込みオブジェクト
- ブラウザーオブジェクト
- DOMオブジェクト
- ユーザー定義のオブジェクト
上記のオブジェクトは、特別な宣言や定義なしに利用することができます。
組み込みオブジェクトの種類
オブジェクト名 | 説明 |
---|---|
Global | JavaScriptの基本機能にアクセスするための手段を提供 |
Object | 全てのオブジェクトの雛形 |
Array | 配列を操作するための手段 |
Date | 日付を操作するための手段 |
String | 文字列を操作するための手段 |
RegExp | 正規表現に関わる機能を提供 |
Number | 数値を操作するための手段を提供 |
Error | エラー情報を管理する。 |
Proxy | オブジェクトの挙動をカスタマイズする手段を提供 |
Promise | 非同期処理を実装するための手段を提供 |
Objectオブジェクトの特徴
全てのオブジェクトの基本オブジェクトです。
組み込みオブジェクトも、ユーザー定義のオブジェクトも、ブラウザーオブジェクトも全て「Objectオブジェクト」が元となっています。
オブジェクトの共通的な性質や機能を提供する。
全てのオブジェクトが「Objectオブジェクト」の機能を使うことができます。
ブラウザーオブジェクトの種類
オブジェクト名 | 説明 |
---|---|
window | ブラウザが持っている情報を全て格納しているオブジェクト |
document | HTMLドキュメント部分 |
form | フォーム部分 |
image | 画像ファイル |
button | ボタン |
text | テキスト部分 |
メソッド
オブジェクトに対して、操作を行います。
プロパティ
オブジェクトの属性を示します。
オブジェクトを生成するには?
JavaScript内でObjectを作成したい場合は、下記のような構文を使います。
1 |
var 変数名 = new オブジェクト名(); |
この形式で作成したオブジェクトには自由にプロパティを追加していくことが可能です。
なお、newしたタイミングでオブジェクトのメンバの初期化も行われます。これをオブジェクト名と同名のメソッドである「コンストラクタ」と呼びます。
thisキーワード
thisキーワードは、コンストラクターによって生成されるインスタンス(つまり、自分自身のこと)を表します。
オブジェクトのメンバを全て取り出すには?
下記のようなfor文を使うことで、オブジェクト内のメンバを全て取り出すことが可能です。
1 2 3 |
for(仮の変数 in オブジェクト){ 処理内容 } |
オブジェクトのメンバの値にアクセスしたい場合は、「オブジェクト[仮の変数]」という形で出力できます。
JavaScriptは、プロトタイプベースのオブジェクト指向言語
ここまで、JavaScriptでのオブジェクト指向の基本について展開してきましたが、もう一つ重要な概念があり、JavaScriptは、Java等の言語のように「クラスベース」ではなく、「プロトタイプベースのオブジェクト指向言語」になります。
newを使ったインスタンス化という概念はありますが、「クラス」という概念はなくあくまで「プロトタイプ(雛形)」という概念のみが存在します。
「プロトタイプ」とは?
「あるオブジェクトの元となるオブジェクト」のこと、JavaScriptでは「プロトタイプ」を利用してオブジェクトを作成していくことになります。
よって、JavaScriptは、よく「プロトタイプベースのオブジェクト指向言語」と呼ばれます。
「クラスベースのオブジェクト指向言語」との違い
端的に言えば、クラスと言う抽象的な設計図を使ってインスタンスを生成するのではなく、あくまでプロトタイプ(雛形)という具体化されたオブジェクトを元に新しいインスタンスを作成するのです。
また、実務的な特徴としては、「より縛りが弱いクラス」で、具体的に言えば、「関数(Functionオブジェクト)」に対してクラスの役割を与えている言語と言えます。(JavaScriptの関数は非常に緩いですからね。)
具体例
下記のように、変数の中に関数リテラルを代入していますが、これが最もシンプルなJavaScriptのプロトタイプになります。
1 |
var Prot = function(){}; |
上記のように、宣言したプロトタイプは下記のようにnewしてインスタンス化することができます。
1 |
var pro = new Prot(); |
この記事へのコメントはありません。