オブジェクトとは(JavaScript)
オブジェクトは、まさに「モノ」そのもの
オブジェクトとは、名前をキーにアクセスできる配列です。
ハッシュ、連想配列などと呼ばれることもあります。
通常の配列はインデックス番号しかキーにできないのに対して、オブジェクトは文字列をキーにアクセスできるので、データの視認性(可読性)が高いのが特徴です(p44)。
JavaScriptにおいては、連想配列とオブジェクトは同一です。その時々の文脈によって使い分けられます(p44)。
オブジェクトリテラルは記法、アクセスする方法も通常の配列とは異なります。
See the Pen 20160808object by r.shimizu (@r_shimizu) on CodePen.
通常の配列の記法とは
See the Pen 20160808array by r.shimizu (@r_shimizu) on CodePen.
オブジェクト指向
プログラム上で扱う対象をオブジェクトに見立てて、オブジェクトを中心としてコードを組み立てていく手法のことをオブジェクト指向と言います。
また、オブジェクトとは、「物体をデータ(プロパティ)と操作(メソッド)の集合として定義し、プログラムで扱えるようにしたもの」です。
イメージとして、車を物体(オブジェクト)とした場合、以下のようになります。
2つは同じ「車」というオブジェクトです。
車オブジェクトには、種類・製作会社・色といったデータがあり、これは車によって異なります。
このようにオブジェクトが持つデータのことをプロパティと呼びます。
CSSのプロパティ(文字色・文字サイズなど)のようなもので、JavaScriptでは文字数などのプロパティがあります。
また車オブジェクトは、アクセル・ブレーキ・クラクションといった操作を行うことができ、このようにオブジェクトに対する操作のことをメソッドと呼びます。メソッドは関数のようなもので、特定の処理を行います。
このように車(オブジェクト)をプロパティとメソッドの集合として定義することで、車が何台あっても同じ尺度で扱うことができます。
参考 ゼロから始めるJavaScript講座Vol14 オブジェクトの基礎
オブジェクト = プロパティ + メソッド
オブジェクトは、プロパティとメソッドから構成されています。例えば、入力フォームを表すフォームオブジェクトの場合...
オブジェクト指向の世界では、用意されたオブジェクトを直接利用することを認めていません。その理由は、オブジェクトが「自分自身の中でデータを保持できる」という性質を持っているからです。(p87)
オブジェクトはデータを保持するもの
例えば、オブジェクトに対して、アプリケーションが複数の箇所からデータを書き込むと不整合が起きてしまいます。
そこで、オリジナルのオブジェクトには手を加えず、複製したコピーを操作することでコンフリクトを防ぐようになっています。
上記の複製コピーのことをインスタンス化といい、それによってできた複製のことをインスタンスと言います。
new演算子
オブジェクトをインスタンス化するには new演算子を利用します
var 変数名 = new オブジェクト名([引数,...]);
オブジェクトのインスタンスを生成し、変数に格納しています。
オブジェクトには、オブジェクトを初期化するために、オブジェクトと同名のメソッドが用意されています。この初期化メソッドのことをコンストラクタと呼びます。
オブジェクト名は、正確にはコンストラクタ名です。(p89)
また、JavaScriptにクラスはありません。コンストラクタからインスタンスを生成します。
JavaScriptのクラス?コンストラクタ?? - Qiita
生成されたインスタンスは、変数に格納され、以降、その変数をオブジェクトとして扱うことができます。
インスタンスが格納された変数は、インスタンス変数(オブジェクト変数)と呼びます。
インスタンス変数から、プロパティやメソッドを呼び出すには、ドット構文を使って以下のように記述します。
変数名.プロパティ名 [= 設定値]; 変数名.メソッド名 ([引数,...]);
静的プロパティ / 静的メソッド
プロパティやメソッドによっては、例外的にインスタンスを生成せずに利用できるものがあります。
このようなものを、静的プロパティ、静的メソッドといいます。呼び出すための構文は以下の通りです。
オブジェクト名.プロパティ名 [= 設定値]; オブジェクト名.メソッド名 ([引数,...]);
これら静的メソッドは、インスタンスから呼び出そうとするとエラーになります。逆に、インスタンスを経由して呼び出すプロパティやインスタンスは、
インスタンスプロパティ、インスタンスメソッドと呼びます。