概要
メンバー演算子はオブジェクトのプロパティ又はメソッドへのアクセスを提供します。
オブジェクトは実際には 連想配列 (別名 map、 dictionary、 hash、 lookup table)です。 この配列における キー はプロパティ及びメソッド(関数を参照するプロパティ)の名前です。 プロパティにアクセスするには2つの方法があります。 ドット表記法とブラケット表記法(別名 添字演算子)です。
注記: ECMAScript 仕様はこれらの演算子を"member operators"というよりも"property accessors"と呼んでいます。
ドット表記法
get = object.property; object.property = set;
property
は有効な JavaScript 識別子、即ち、数字で始まってはいけない、アンダースコア ("_
") 及びドル記号 ("$
") を含む英数字の連続でなければなりません。 例えば object.$1
は有効ですが、 object.1
はそうではありません。
// 例 document.createElement('pre');
ここでは、メソッド名 "createElement" が document
から検索され、呼ばれます。
ブラケット表記法
get = object[property_name]; object[property_name] = set;
property_name
は文字列です。この文字列は有効な識別子である必要はありません。例えば "1foo"、 "!bar!"、 又は " " (空白文字) であろうが、いかなる値を持つことも出来ます。
// 例 document['createElement']('pre');
これは前の例とまったく同じことです。
プロパティ名
プロパティ名は文字列でなければなりません。これは非文字列オブジェクトがオブジェクトのキーとして利用できないことを意味します。数字を含む全ての非文字列オブジェクトは、toString
メソッドを通して文字列へ型変換されます。
// 例 var object = {}; object['1'] = 'value'; alert(object[1]);
これは、 1 が '1' に型変換されてから "value" を出力します。
var foo = {unique_prop: 1}, bar = {unique_prop: 2}, object = {}; object[foo] = 'value'; alert(object[bar]);
これもまた、foo 及び bar のどちらも同じ文字列に変換されてから、"value"を出力します。 SpiderMonkey JavaScript エンジンでは、この文字列は "[object Object]" となるでしょう。
メソッドの束縛
メソッドはそのメソッドのオブジェクトに束縛されていません。特に、this
はメソッド内で固定されません。即ち、this
は必ずしもそのメソッドを含むオブジェクトを参照する必要はありません。this
は、代わりに関数呼び出しによって "渡されます"。
『メソッドの束縛』を参照してください
eval
上の注意
JavaScript 初心者はしばしば、代わりにブラケット表記法を使えるところで eval
を使用する過ちを犯します。例えば次の様な構文です。
// before x = eval('document.form_name.' + strFormControl + '.value');
eval
は低速であるため、出来る限り避け、代わりにブラケット表記法を使った方が良いでしょう。
// after x = document.form_name[strFormControl].value;