JavaScriptのオブジェクトとは:ちゃんと理解してますか

白石俊平(あゆた)
2008-01-21 15:00:00
  • このエントリーをはてなブックマークに追加

 前回は、JavaScriptにおける関数はオブジェクトであり、関数定義は「オブジェクトの作成」に他ならない、と言うお話でした。今回は、「では、JavaScriptにおけるオブジェクトとは何か?」というお話をしたいと思います。

JavaScriptオブジェクトとは「ハッシュテーブルのようなもの」

 オブジェクト指向言語における「オブジェクト」とは、「データと振る舞いをひとまとまりにしたもの」として説明されることが多いです。例えばJavaのオブジェクトは、フィールド(=データ)とメソッド(=振る舞い)から構成されます。

 しかし、JavaScriptにおける「オブジェクト」の概念は、ある意味それより遥かに単純です。なぜなら、誤解を恐れずいうならば、JavaScriptオブジェクトとは、単なる「ハッシュテーブル」のようなものとして捉えることができるからです(※1)。

 ハッシュテーブルとは、「キーと値の組み合わせ」でデータを管理する構造のことですね。JavaScriptオブジェクトにおいては、「キー」は変数名や関数名と言った文字列(※2)、「値」は変数や関数となります。実際のコードで確認してみましょう。

※1 実際は、ハッシュテーブルよりも遥かに複雑ですが、JavaScriptが値の解決に利用する「プロトタイプチェイン」などの仕組みは、連載のもう少し後でお話しします。
※2 キーは数値の場合もあります(配列ライクなオブジェクトのインデックスなど)。
  • コメント(6件)
#1 anonymous   2009-04-22 15:30:53
「-v1 => "変数1" -f2 => 無名関数」の-f2は-f1の間違いかと思われます。
#2 tomita   2009-04-23 15:41:45
builder編集部 冨田です。いつもご愛読頂き、ありがとうございます。

ご指摘の件ですが、確かに誤りでしたので下記の通り修正させて頂きました。

読者の皆さま並びに関係各位には深くお詫び申し上げます。
「-v1 => "変数1" -f2 => 無名関数」
↓
「-v1 => "変数1" -f1 => 無名関数 」

また、「-」は箇条書きのために付与した記号であることから、記事では

・v1 => "変数1"
・f1 => 無名関数

と修正させて頂きました。
#3 anonymous   2009-10-09 11:18:17
上記修正されておりません。
f2のままになっておりますので、修正お願いいたします。
#4 anonymous   2012-02-06 14:33:45
「片付けを持つ言語」は「型付けを持つ言語」の間違いかと思われます。
#5 builder編集部   2012-02-06 17:51:45
Anonymous様

builder編集部です。ご指摘、ありがとうございました。
本記事の2ページ目を修正いたしました。

この度はご迷惑をおかけしまして、誠に申し訳ございませんでした。
今後もご愛読頂ければ幸いです。よろしくお願いいたします。
#6 js素人   2012-08-10 17:09:10
直したって書いてるけど治ってないですよ。
舐めすぎです。
  • 新着記事
  • 特集
  • ブログ