2

次の actionscript3 プログラムを実行しようとしましたが、f() 関数の呼び出し結果に驚きました。f() の結果が「1」または少なくとも「未定義」であることを期待していましたが、「0」の値は意味がありません。

この動作について説明がある場合、またはこの動作を「正常」と見なすかどうかを教えていただければ幸いです。AVM2 が実際にどのように機能するかを理解するために、Action Script プログラムの動作を研究していることを正確に述べたいと思います。したがって、同等のコードに同じことを行うよう求めているわけではありません。結果として、他のトリッキーな例があれば、私も興味があります。

package {
import flash.display.Sprite;

  public class S2 extends Sprite {
      public function f():* {
           return x;
       }      
       public static function fs():*{
           return x;
       }      
  }
}
var x:int = 1 ;
var a:S2 = new S2();
var g:Function = a.f;
var gs:Function = S2.fs;
trace("tracing(g)...:"+g()); //tracing(g)...:0
trace("tracing(gs)...:"+gs()); //tracing(gs)...:1

注: このプログラムを次のコマンド ラインでコンパイルしました。

mxmlc -debug -static-link-runtime-shared-libraries=true -output S2.swf -- S2.as
4

1 に答える 1

1

あなたの変数は、あなたが戻ってきxたものとは異なるスコープに存在しますxS2.f()

S2extends はSpriteDisplayObjectすでに ax プロパティを持っています。
これがあなたが返すものです。

変数名を次のように変更するmyXと、予想どおりのエラーが発生します。

これを行うと、返されるものが変わります:

var a:S2 = new S2();
a.x = 10;
trace(a.f()); // will trace 10
于 2011-11-07T13:39:54.803 に答える