そっちかー。
Javascriptの「this」は日本語の「僕」みたいなものだ、と言ってみるテスト
ianimeの興味より this ポインタの方が気になられてるらしい。
Javaやってたら結構有る話で傍観モードだったけどコメントしてみるテスト(w。
Javascriptだと直感的でない事の本質は下記2点だと。
1.function()によってコンテキストが変わっている事に気がつきにくい
2.無名ブロックのコンテキストはGlobalオブジェクトに成るのは仕様
比較のためにJavaで書いてみる。
public class Test {
public void hello(){
final Test test = this;
Thread th = new Thread(){
public void run(){
System.out.println( this.toString() );
System.out.println( test.toString() );
System.out.println( Test.this.toString() );
}
};
th.start();
}
public static void main( String argv[] ){
Test test = new Test();
System.out.println( test.toString() );
System.out.println( "-- " );
test.hello();
}
}
Test@41d683
--
Thread[Thread-0,5,main]
Test@41d683
Test@41d683
thisが別クラス内であれば別のオブジェクトに成るのは自然な流れ。
なので、1.の解説終わり。
Javaだとself使うにしてもfinalを要求される。
評価時にselfの内容が変わっている可能性を避けるためだけど、
こういう保護機能がない所がさすがjavascriptだ。
で、Javaだと Test.this という書き方も出来る。
これはまさに「太郎が僕に」という表現だろう。
個人的にはこの書き方が好き。
一つ前のでも動くけど、finalとはいえローカルスコープの変数を、
クロージャーでアクセスするのが気色悪いから。
また、Javaだと無名クラスでもそれなりに名前が付く。
なので「太郎が僕に」と言う事も可能だけど、
Javascriptだと無名にすると、Gobalオブジェクトのプロパティになる。
これは仕様。らしい。
なので太郎がとか次郎がとか言う訳では無く、
「神様が」
という事に成ってるのが本当は適当かもしれない。