0

「this」がクラス関数/メソッド内で使用された場合と、匿名関数内で使用された場合とで動作が異なるのはなぜですか。

例えば

public MyClass 
{

     function myfun()
     {
        output(this) // << will show the instance of this class but not myfun() function

        abc = function ()
        {

            output ( this ) // << will show abc function 
        }

        abc()
     }

}

では、なぜ「this」は MyClass のインスタンスを出力するのに myfun() を出力しないのでしょうか。匿名関数との違いは何ですか?

4

1 に答える 1

3

詳細は言語によって異なりますが、匿名インライン メソッドの背後にある一般的な考え方は、コンパイラが新しいクラスを作成することです (おそらく、独自の使用のためだけにランダムな名前が付けられます)。そのクラス内にはメソッド (繰り返しますが、おそらく独自の使用のために自動生成された名前が付けられます)、そのメソッドは匿名メソッドの作業を行います。次に、匿名メソッドの元の呼び出しサイトで、このコンパイラ生成クラスのインスタンスを作成し、そのクラス内の適切なメソッドを呼び出します。

そのため、その匿名メソッドの定義は、匿名メソッドを宣言した型内からではなく、実際には別の型内から呼び出されます。

于 2013-10-10T20:23:10.017 に答える