2

我尝试执行以下 actionscript3 程序,我对调用 f() 函数的结果感到惊讶。我期待 f() 的结果是“1”或至少是“未定义”,但“0”值对我来说没有任何意义。

如果您有这种行为,或者知道您是否认为这种行为是“正常的”,我将很高兴对此行为有一个很好的解释。我想明确一点,我正在研究动作脚本程序的行为,以了解 AVM2 的真正工作原理,因此我不是要求等效代码来做同样的事情。因此,如果您有其他棘手的示例,我也很感兴趣。

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 Sprite,而后者又 extends DisplayObject,它已经具有 ax 属性。
这就是你要返回的。

如果您将变量名称更改为类似的名称,myX您将收到预期的错误。

这样做会改变返回的内容:

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