【JavaScript】オブジェクト
関数とオブジェクトは、言語によってやりたいことは大体同じかもしれないけれど、基本的な仕様が異なる!
なんか同じものかな~と思うなかれ!
オブジェクトとは
・JavaScriptの基本となるデータ型
・プリミティブ型ではない値
※プリミティブ型の値はオブジェクトではないが、不変オブジェクトのように振る舞う
・複合型のデータ型
・順序付けされていないプロパティの集合であり、プロパティは名前と値をもつ
・オブジェクト自身のプロパティを継承できる
ほかのオブジェクトからプロパティを継承することもできる
継承対象になるオブジェクトを「プロトタイプ」と呼ぶ
・可変
・値ではなく参照で操作する
理解が難しい理由
・オブジェクトはいろんなものを表しすぎている!
・1番トップにあり、みんなが継承しているのも「オブジェクト」だし、そのオブジェクトを継承しているのも「オブジェクト」
例)基本になるもの「車」
→車を継承している軽自動車も、トラックも「車」
関数について
Java、C#
・関数定義がない(第一級関数をサポートしていないため)
・いきなり関数みたいなものを書くことができない
・クラスの中でメソッドを定義している
・JavaScriptみたいに関数定義をするためのものが、ラムダ?
第一級関数
JavaScript
・関数どこでもいきなり使える
{キー:バリュー}
こんなイメージかも?
・プロパティ {変数名:定数}
・メソッド {変数名:関数}
りあクト!【1.言語・環境編】(p65)
JavaScript の『オブジェクト』には、暗黙の内に狭義のオブジェクトと広義のオブジェクトの2 つがある
狭義のオブジェクト
・キーとそれに対応する値を持ったプロパティの集まり
・一般的には『連想配列』と呼ばれる
・多くの場合JSON 形式で表現できる
広義のオブジェクト
・プリミティブ値以外のすべてのものを包括して指す
・すべてObject という標準組み込みオブジェクトを最終的な継承元に持ってる
他の言語におけるオブジェクト
・一般的なクラスベースのオブジェクト志向言語では、クラスインスタンスのことを『オブジェクト』という