質問: パーフェクトjavascriptの124pでドット演算子とブラケット演算子の違いについて説明しているところで、 > > 些末な話ですが**プロパティアクセスの演算対象は変数ではなくオブジェクトの参照です。これは次のようにオブジェクトリテラル{}に直接演算可能**なことで確認できます。 > > > ``` ({x:3,y:4}).x;//3 ({x:3,y:4})["x"];//3 ``` > > 実際にオブジェクトリテラル{}に演算する機会はほとんどありませんが、メソッドチェーンなどの形で、演算対象が変数ではない形式を目にすることは普通にあります。 > > > とありました。 この**プロパティアクセスの演算対象は変数ではなくオブジェクトの参照です。これは次のようにオブジェクトリテラルに直接演算可能...**の意味がいまいち理解できませんでした。 <{x:3,y:4}を囲っている>丸括弧内の{x:3、x:y}に接続した時の演算対象は、変数ではなくオブジェクトの参照、とはかみくだいて説明するとどのようになりますか。特に、接続した時の**演算対象**とありますが、 接続したあとに演算ってしているのでしょうか。オブジェクト内の変数を取得しているようにしか見えないです。またオブジェクトの参照というのは、つまりオブジェクトのアドレス(メモリ上の参照値)のことでしょうか。 またこの<{x:3,y:4}を囲っている>丸カッコ、恐らく関数だと思いますが、これは即実行関数であっておりますか。
回答: まず、いちばん大きな誤解を解いておきます。 > > またこのカッコだけしかない関数は、即実行関数であっておりますか。 > > > これは関数ではなく、**オブジェクトリテラル**です。直接プロパティを取ると、演算子の処理の関係上うまくいかないので、カッコを付けているだけです。 ``` // 上と下のコードの意味は、(上が1つ変数を作ることを除けば)同じ var foo = {x:3,y:4}; foo.x; ({x:3,y:4}).x; ``` そして、プログラミング言語の「演算」は、数学的な四則演算などよりずっと幅広い概念で、「プロパティアクセス」自体も「演算」の一種と区分されます(MDNでも、角括弧やドットによるアクセスを「メンバー演算子」としています)。`Object.defineProperty`を使えば、(有用かは別として)プロパティアクセスで呼び出される関数を作ることすら可能です。