« JavaScriptでthisスコープをコントロールする | main | 10分でわかるOpen Laszlo »

2005年09月01日

JavaScript, ActionScriptにおける .this とは何なのか?

人様にActionScript (あるいは JavaScript)を教える時に、絶対に鬼門となるthisスコープについてのまとめメモ。

ECMAスクリプトでは関数が他の変数に代入可能な為、関数のthisが文脈によって変動します。どうも、Javaとかやってる人にはそれがスゴイ気持ち悪いらしいのです。

thisとな何なのか?
端的に言うならば、thisは「その関数を、何のプロパティと解釈して呼び出したか?」によって決定します。

関数を直接呼び出す場合と、オブジェクトのプロパティに代入してから呼び出す場合を比較してみます。


function hoge(){
alert(this);
//trace(this); flashの場合はコッチ
}

var myObj = new Object();
myObj.hoge = hoge;

hoge();
myObj.hoge();


のように書いた場合、
hoge()ではwindowオブジェクト(flashの場合は_root)を、
myObj.hoge()では、myObjオブジェクトを返します。

実行されるのは同じ関数ですが、windowの関数hogeとして呼び出されたか、myObjの関数hogeとして呼び出されたかでスコープが変わるわけです。

つまり、オブジェクトに対するonclick = イベントハンドラという定義の場合、ハンドラ内でのthisオブジェクトはイベントの発生源となります。
これは、イベントハンドラを、発生源のonclickプロパティに関数を代入しているので、「その関数を、何のプロパティと解釈して呼び出したか?」に従い、イベント発生源がthisを返します。

というように覚えておくと便利です。

投稿者 Taka : 2005年09月01日 17:20

book

dotfla.gif

bookmark

はてなブックマークに追加

del.icio.usに追加

trackbacks

this entry's trackback URL:
http://www.fladdict.net/cgi-bin/mt3/mt-tb.cgi/293

このリストは、次のエントリーを参照しています: JavaScript, ActionScriptにおける .this とは何なのか?:

» Memory Foam Mattress from Memory Foam Mattress
Memory Foam Mattress [read more]

トラックバック時刻: 2006年02月20日 08:51

» Retirement Planning from Retirement Planning
Retirement Planning [read more]

トラックバック時刻: 2006年02月20日 23:37

» real estate investing from real estate investing
real estate investing [read more]

トラックバック時刻: 2006年02月26日 00:27

» color contacts from colorcontacts
color contacts [read more]

トラックバック時刻: 2006年02月27日 02:06

comment

Function.apply や Function.call を使うと、イベント発生源のプロパティへ代入することなく
関数コールが可能になるので、これはこれで別の説明が必要かも。
といっても、こんなもの使う頃にはとっくにスコープ理解してそうですが(^^;

by mune : 2005年09月02日 17:35

applyやcallを説明するとなると、かなり上級者むけですよー。
この2つは例外ってことで :-)

by Taka : 2005年09月05日 19:22

when pair give opponents love: http://www.ananova.com/ stake can anticipate tournament , green game kill or not

by Jose Carpenter : 2006年03月28日 11:16

コメントしてください




保存しますか?