- 188 名前:デフォルトの名無しさん mailto:sage [2006/06/15(木) 15:47:53 ]
- >>186
this には、その関数を起動する際の第一オペランド(ドット演算子の前にあるオブジェクト)が束縛されています。 メッセージングメタファで言えば、メッセージの受け手であるレシーバですね。(どちらでも、お好きな方で) new Programmer(21, "EJS"); で起動された Programmer 内において、this には、新しく作られたインスタンス (ここでは仮に this_prog と呼称することにします)が束縛されています。その場で this.__super(nAge); により 起動、つまり、this_prog.__super(nAge) で起動された Person 内では、this は this_prog を束縛することになります。 ですから、Person 内の this.m_nAge = nAge; は、つまり this_prog.m_nAge への nAge の束縛ということに なるので、戻ってくると新しく作ったインスタンスの m_nAge スロットには 21 が束縛されている…というカラクリです。 もし、__super スロットを介さずに、ただ Person を起動しただけでは、第一オペランドが省略時のグローバル オブジェクト [object global] になってしまうので、Person 内の this もそうなってしまい、m_nAge スロットも グローバルオブジェクトに作られてしまいます。
|

|