FLASHAS的使用技巧匯總
若水221147由 分享
時(shí)間:
都是在項(xiàng)目中總結(jié)的,經(jīng)過(guò)實(shí)踐的,在flex2 as3下使用的。
as調(diào)js
ExternalInterface.call("js函數(shù)名",參數(shù):數(shù)組);(可以接收返回值)
js調(diào)as
as:ExternalInterface.addCallback("js中使用的函數(shù)名(字符串)", as中的函數(shù)(函數(shù)類型));
js:SWF名.js中使用的函數(shù)名(參數(shù));
對(duì)象清理:
as中如果某個(gè)對(duì)象不被使用,且沒(méi)有任何對(duì)象引用它,則此對(duì)象會(huì)被回收器回收(不一定什么時(shí)候),所以用完的對(duì)象一定要處理(比如加的監(jiān)聽要?jiǎng)h除等等),否則會(huì)長(zhǎng)占內(nèi)存。
重繪:
flash中被擋住的對(duì)象也會(huì)被重繪,比如在一個(gè)位置不停的畫圓,畫到幾百或幾千層,當(dāng)鼠標(biāo)經(jīng)過(guò)這塊的時(shí)候會(huì)感覺(jué)到速度變慢,查看cpu狀態(tài)會(huì)看到cpu被占滿,但不會(huì)占內(nèi)存。
判斷對(duì)象類型:
if(a is 類型){}
獲得對(duì)象類型:
trace(typeof 對(duì)象)輸出對(duì)象類型
類型轉(zhuǎn)化:
var a:類型 = b as 類型;
強(qiáng)轉(zhuǎn):
var a:類型 = 類型(b);
判斷數(shù)字:
isNaN(表達(dá)式),注意是數(shù)字時(shí)返回false
Timer
不要認(rèn)為Timer可以極其準(zhǔn)確;使用Timer時(shí)間間隔不要低于10毫秒.
private,protected,internal,public訪問(wèn)權(quán)限
private:只能在類本身內(nèi)部訪問(wèn)
protected:可以由類本身或任何子類訪問(wèn).
internal:可以由類本身或者相同包內(nèi)的任何類訪問(wèn);
public:可以在類內(nèi)部訪問(wèn),也可以由類實(shí)例訪問(wèn)
for...in與for each...in的區(qū)別
與for...in循環(huán)不同的是,for each...in循環(huán)中的迭代變量包含屬性所保存的值,而不包含屬性的名稱(或主鍵,索引).
例如:var obj:Object={name1:value1,name2:value2};
for...in取出的是name,for each...in取出的是value
對(duì)象:
AS中所有對(duì)象可默認(rèn)互相轉(zhuǎn)換,如數(shù)組可以當(dāng)作Map來(lái)用。
但是作為數(shù)組來(lái)用時(shí),就不能保證順序了。
比如:
var array:Array = new Array();
array["a"] = new Object();
ToolTip
如果禁止ToolTip顯示,
1.this.truncateToFit = false;(不會(huì)出現(xiàn)...)
2.重寫updateDisplayList,并最后super.toolTip = null;(會(huì)出現(xiàn)...)
反射:
classType = flash.utils.getDefinitionByName(className) as Class;
new classType();
格林尼治時(shí)間 格式化時(shí)出錯(cuò)。(如中國(guó) 時(shí)區(qū),1970/01/01 08:00時(shí)出錯(cuò),已經(jīng)確認(rèn)是flex的bug)
replace所有
AS中沒(méi)有replaceAll 函數(shù),要實(shí)現(xiàn)這個(gè)函數(shù)可以用正則表達(dá)式
如: 將 00:00:00 中的 ’:‘替換成 ‘ ‘ 可如下實(shí)現(xiàn)
var testStr : String = "00:00:00";
var repedStr : String = testStr.replace(/:/g, " ");
/:/g 后面的g不能少, g 表示全局
AS對(duì)象深Clone方法:
private function clone(_source:Object):* {
var copier:ByteArray = new ByteArray();
copier.writeObject(_source);
copier.position = 0;
return(copier.readObject());
}
mx_internal類型的方法也可以重載:(不推薦)
需要在import的最下面進(jìn)行如下聲明-
use namespace mx_internal
as調(diào)js
ExternalInterface.call("js函數(shù)名",參數(shù):數(shù)組);(可以接收返回值)
js調(diào)as
as:ExternalInterface.addCallback("js中使用的函數(shù)名(字符串)", as中的函數(shù)(函數(shù)類型));
js:SWF名.js中使用的函數(shù)名(參數(shù));
對(duì)象清理:
as中如果某個(gè)對(duì)象不被使用,且沒(méi)有任何對(duì)象引用它,則此對(duì)象會(huì)被回收器回收(不一定什么時(shí)候),所以用完的對(duì)象一定要處理(比如加的監(jiān)聽要?jiǎng)h除等等),否則會(huì)長(zhǎng)占內(nèi)存。
重繪:
flash中被擋住的對(duì)象也會(huì)被重繪,比如在一個(gè)位置不停的畫圓,畫到幾百或幾千層,當(dāng)鼠標(biāo)經(jīng)過(guò)這塊的時(shí)候會(huì)感覺(jué)到速度變慢,查看cpu狀態(tài)會(huì)看到cpu被占滿,但不會(huì)占內(nèi)存。
判斷對(duì)象類型:
if(a is 類型){}
獲得對(duì)象類型:
trace(typeof 對(duì)象)輸出對(duì)象類型
類型轉(zhuǎn)化:
var a:類型 = b as 類型;
強(qiáng)轉(zhuǎn):
var a:類型 = 類型(b);
判斷數(shù)字:
isNaN(表達(dá)式),注意是數(shù)字時(shí)返回false
Timer
不要認(rèn)為Timer可以極其準(zhǔn)確;使用Timer時(shí)間間隔不要低于10毫秒.
private,protected,internal,public訪問(wèn)權(quán)限
private:只能在類本身內(nèi)部訪問(wèn)
protected:可以由類本身或任何子類訪問(wèn).
internal:可以由類本身或者相同包內(nèi)的任何類訪問(wèn);
public:可以在類內(nèi)部訪問(wèn),也可以由類實(shí)例訪問(wèn)
for...in與for each...in的區(qū)別
與for...in循環(huán)不同的是,for each...in循環(huán)中的迭代變量包含屬性所保存的值,而不包含屬性的名稱(或主鍵,索引).
例如:var obj:Object={name1:value1,name2:value2};
for...in取出的是name,for each...in取出的是value
對(duì)象:
AS中所有對(duì)象可默認(rèn)互相轉(zhuǎn)換,如數(shù)組可以當(dāng)作Map來(lái)用。
但是作為數(shù)組來(lái)用時(shí),就不能保證順序了。
比如:
var array:Array = new Array();
array["a"] = new Object();
ToolTip
如果禁止ToolTip顯示,
1.this.truncateToFit = false;(不會(huì)出現(xiàn)...)
2.重寫updateDisplayList,并最后super.toolTip = null;(會(huì)出現(xiàn)...)
反射:
classType = flash.utils.getDefinitionByName(className) as Class;
new classType();
格林尼治時(shí)間 格式化時(shí)出錯(cuò)。(如中國(guó) 時(shí)區(qū),1970/01/01 08:00時(shí)出錯(cuò),已經(jīng)確認(rèn)是flex的bug)
replace所有
AS中沒(méi)有replaceAll 函數(shù),要實(shí)現(xiàn)這個(gè)函數(shù)可以用正則表達(dá)式
如: 將 00:00:00 中的 ’:‘替換成 ‘ ‘ 可如下實(shí)現(xiàn)
var testStr : String = "00:00:00";
var repedStr : String = testStr.replace(/:/g, " ");
/:/g 后面的g不能少, g 表示全局
AS對(duì)象深Clone方法:
private function clone(_source:Object):* {
var copier:ByteArray = new ByteArray();
copier.writeObject(_source);
copier.position = 0;
return(copier.readObject());
}
mx_internal類型的方法也可以重載:(不推薦)
需要在import的最下面進(jìn)行如下聲明-
use namespace mx_internal