整理自 Flex 2 / AS3 專案實戰,經驗之談,直擊痛點。
// AS 呼叫 JS
ExternalInterface.call("jsFunc", argsArray); // 可接收返回值
// JS 呼叫 AS
// AS 端註冊
ExternalInterface.addCallback("jsCallName", asFunction);
// JS 端調用
swfObject.jsCallName(args);
// 判斷類型
if (obj is MyClass) {}
// 獲取類型名
trace(typeof obj); // "object" "string" "number" 等
// 安全轉換 (失敗返回 null)
var a:MyClass = b as MyClass;
// 強制轉換 (失敗拋錯)
var a:MyClass = MyClass(b);
isNaN(expr) // 是非數字返回 true,注意邏輯反轉
| 修飾符 | 訪問範圍 |
|---|---|
| private | 僅本類內部 |
| protected | 本類 + 子類 |
| internal | 同包內所有類(默認) |
| public | 任意處 |
var obj = {name1:"v1", name2:"v2"};
for (var k in obj) { trace(k); } // 輸出 name1, name2 (鍵)
for each (var v in obj) { trace(v); } // 輸出 v1, v2 (值)
// 方法 1:不顯示省略號
this.truncateToFit = false;
// 方法 2:重寫 updateDisplayList 最後 super.toolTip = null; (會有省略號)
var ClassRef:Class = flash.utils.getDefinitionByName(className) as Class;
var instance:* = new ClassRef();
Flex `DateFormatter` 處理 GMT 時間在特定時區(如東八區 1970/01/01 08:00)會報錯,**確認的 Flex Bug**,需自行修正邏輯。
// 無 replaceAll,用正則 global 旗標
var str = "00:00:00";
var result = str.replace(/:/g, " "); // "00 00 00" g 旗標不可少
private function clone(source:Object):* {
var ba:ByteArray = new ByteArray();
ba.writeObject(source);
ba.position = 0;
return ba.readObject();
}
use namespace mx_internal;
// 即可重寫標記為 mx_internal 的框架方法
這 15 項技巧覆蓋了 AS3 開發的高頻痛點:跨語言通信、記憶體/效能、類型系統、時間處理、字符串、反射、框架擴展。建議收藏備查,代碼審查時逐項對照。