2007/11/10 土曜日

太郎でも次郎でもない

カテゴリー: おぼえ書き — ryu @ 17:57:50

そっちかー。

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オブジェクトのプロパティになる。
これは仕様。らしい。

なので太郎がとか次郎がとか言う訳では無く、
「神様が」
という事に成ってるのが本当は適当かもしれない。

644 件のコメント

コメントはまだありません。

このコメント欄の RSS フィード トラックバック URL

コメントフォームは現在閉鎖中です。

37 queries. HTML convert time: 0.252 sec. Powered by WordPress 2.8