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
這是正確的!謝謝。這是符合語言規範的唯一答案,但我忘記了這麼簡單的程序已經有很多超類。 –
只是另一件事:沒有「-debug」選項編譯相同的程序會導致「堆棧下溢」錯誤(與在Linux上的flex45 sdk)。生成的字節代碼真的很奇怪(包括在空操作數堆棧上彈出......),在編譯過程中是否已經遇到過這樣的問題? –
這是一個非常不規範的編寫actionscript代碼的方式,我真的很驚訝它甚至可以在類聲明之後的代碼中運行。如果你添加了另一個類,並把它放在它的構造函數中,你應該有更好的運氣。 – grapefrukt