バリケンのJavaScript日記 RSSフィード

2006-11-02

[JavaScript] オブジェクトハッシュ微妙な関係  [JavaScript] オブジェクトとハッシュの微妙な関係 - バリケンのJavaScript日記 を含むブックマーク はてなブックマーク -  [JavaScript] オブジェクトとハッシュの微妙な関係 - バリケンのJavaScript日記  [JavaScript] オブジェクトとハッシュの微妙な関係 - バリケンのJavaScript日記 のブックマークコメント

JavaScriptオブジェクトは、Rubyハッシュみたいな構造になっているんだね。

オブジェクトハッシュにたとえるなら、オブジェクトは「Valueを参照しているKeyの集合体」で、Valueとして関数を参照しているKeyを「メソッド」、Valueとして関数以外を参照しているKeyを「プロパティ」と呼ぶんだね。

だから、JavaScriptのHashオブジェクト(単にJavaScriptオブジェクトにHash操作系のメソッドを追加しただけみたい)をRubyハッシュの感覚で使おうと思うと、落とし穴にはまりそう。たとえば、

$ smjs
js> load("prototype.js");
prototype.js:834: ReferenceError: document is not defined
js> var wday = $H({ sun: "日曜日", mon: "月曜日", tue: "火曜日", wed: "水曜日", thu: "木曜日", fri: "金曜日", sat: "土曜日" });
js> wday.keys()
sun,mon,tue,wed,thu,fri,sat
js> wday["keys"] = "キー";
キー
js> wday.keys()
5: TypeError: wday.keys is not a function
js> wday.keys
キー
js> ^C
$

こんな感じで、Hashオブジェクトに定義済みのメソッド名をキーに使っちゃいけない(使うとそのメソッドが使えなくなっちゃう)みたい。

YuichirouYuichirou2006/11/02 22:44JavaScriptのオブジェクトはハッシュ(連想配列)と完全に等価です。例えばwday.sun == "日曜日" であり、さらにwday["keys"]を上書きする前に wday["keys"]() と入力して実行すると……

muscovyduckmuscovyduck2006/11/03 08:42コメントありがとうございます!>Yuichirouさん
なるほど、そうやってもメソッドを呼べるんですね!

トラックバック - http://javascript.g.hatena.ne.jp/muscovyduck/20061102