日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[转]AS3 与 其他语言 的一些不同点

發(fā)布時間:2025/7/14 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转]AS3 与 其他语言 的一些不同点 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

http://blog.csdn.net/Begin_Game/archive/2008/10/15/3081317.aspx
一:for each ... in與 for..in 一樣都是自動遍歷對象的屬性,不同的是for each...in 更像是為遍歷保存鍵值對的集合而產(chǎn)生的,而這些集合的類型可以是未聲明類型的對象,甚至XML文件,而在遍歷時循環(huán)中的循環(huán)變量類型聲明是用"*"號來表示,意為任意類型。1:遍歷未聲明類型對象:var arr:Object = {1:"jack",2:2046};for each(var i:* in arr){?trace(i);}/-----jack2046

2:遍歷XML:
var xml:XML = <beans>
????<bean>jack</bean>
????<bean>2046</bean>
???? </beans>;
for each(var item:* in xml.bean)
{
?trace(item);
}
/-----
jack
2046

二:break的特殊用法:
在AS3中,由于其作用于動畫的特殊性,孕生出很有意思的的label標簽用法。此label標簽不能獨立存在,必須依賴break、continue兩個跳轉關鍵字進行使用。
gotoout:for(var i:int = 0; i < 10; i++)
??{???
???for(var j:int = 0; j < 10; j++)
???{
????trace("i:" + i + ",j:" + j);
????if((i==0)&& (j==8)){
?????break gotoout;
????}
???}???
??}
/-----
i:0,j:0
i:0,j:1
i:0,j:2
i:0,j:3
i:0,j:4
i:0,j:5
i:0,j:6
i:0,j:7
i:0,j:8

在這里gotoout標簽包含了一個嵌套for循環(huán),之中退出條件為 i=0 && j==8 時,則跳轉出整個循環(huán);如換為continue則為:
gotoout:for(var i:int = 0; i < 10; i++)
??{???
???for(var j:int = 0; j < 10; j++)
???{????
????if((i==0)&& (j==8)){
?????trace("跳過第i:" + i + "? j:" + j +"次循環(huán)");
?????continue gotoout;
????}
????else
????{
?????trace("i:" + i + ",j:" + j);
????}
???}
???if((i==1))
???{
????break;
???}
??}
/---------
i:0,j:0
i:0,j:1
i:0,j:2
i:0,j:3
i:0,j:4
i:0,j:5
i:0,j:6
i:0,j:7
跳過第i:0? j:8次循環(huán)
i:1,j:0
i:1,j:1
i:1,j:2
i:1,j:3
i:1,j:4
i:1,j:5
i:1,j:6
i:1,j:7
i:1,j:8
i:1,j:9

當然也不一定是循環(huán)才能使用breank,但continue一定要配合循環(huán)使用
break:
trace("1");
gotoout:{
?trace("2");
?trace("3");
?break gotoout;
?trace("4");
?trace("5");
}
/-------
trace("1");
gotoout:{
?trace("2");
?trace("3");
?break gotoout;
?trace("4");
?trace("5");
}

continue:
trace("1");
gotoout:{
?trace("2");
?trace("3");
?continue gotoout;
?trace("4");
?trace("5");
}
/-------
1039: 找不到 continue 語句的目標。

標簽也可嵌套使用,但無論嵌套幾層,最終跳出哪層標簽由 break 標簽名 決定的
trace("1");
gotoout:{
?gotoout1:{
??gotoout2:{
???trace("2");
???trace("3");
???break gotoout2;
???trace("4");
???trace("5");
??}
??trace("gotoout1");
?}
?trace("gotoout");
}
/------
1
2
3
gotoout1
gotoout

如break gotoout2 換成 break gotoout ,則程序會直接跳出gotoout標簽,不會打印 gotoout1、gotoout。

三:局部變量可當全局變量使用
AS3的代碼編譯是提交給Flash Play優(yōu)化后編譯,因此會出現(xiàn)在java和C++中不可想象的狀況。
for(var i:int =1; i<=3; i++)
{
?var str:String = "你好,正在循環(huán)";
?trace(i + ":循環(huán)內(nèi):" + str);
}
trace("循環(huán)外:" + str);
/-----
1:循環(huán)內(nèi):你好,正在循環(huán)
2:循環(huán)內(nèi):你好,正在循環(huán)
3:循環(huán)內(nèi):你好,正在循環(huán)
循環(huán)外:你好,正在循環(huán)

可以看到str是在for循環(huán)開始后在循環(huán)內(nèi)部聲明并賦值的,但在循環(huán)結束后在循環(huán)外部依然正常使用了str這個變量,這是由于代碼在編譯過程中編譯器將聲明前置優(yōu)化了。
var str:String;
.......

因此無論將var str:String 放在代碼塊的何處,編譯器總會將變量聲明優(yōu)化前置。但為了程序的可維護性,最好還是按照java、C++等語言的嚴謹寫法書寫代碼。
局部變量雖可隨處聲明,但注意其賦值的有效性,如:
trace("循環(huán)外:" + str);
for(var i:int =1; i<=3; i++)
{
?var str:String = "你好,正在循環(huán)";
?trace(i + ":循環(huán)內(nèi):" + str);
}
/-----
循環(huán)外:null
1:循環(huán)內(nèi):你好,正在循環(huán)
2:循環(huán)內(nèi):你好,正在循環(huán)
3:循環(huán)內(nèi):你好,正在循環(huán)

程序在變量未賦值前就使用此變量,雖可編譯運行,但最終打印出str的值為null。

四:函數(shù)表達式
這一點很像js的匿名函數(shù),可以說完全相同。
var func:Function = function(par:int){
?return par*8;
}
trace(func(8));
/-------
64

聲明了類型為Function名為func的變量,此變量的值很怪異,看上去完全是個函數(shù),其實函數(shù)本身也是對象,把對象賦值給變量有什么不對呢?雖然java有匿名類、C#也引入了匿名函數(shù),但它們因為的實現(xiàn)方式肯定沒有js與as3直觀和簡潔。匿名函數(shù)是由變量記錄這個無名函數(shù)的內(nèi)存地址,而外部訪問是由變量作為介質的,因此刪除變量,等于刪除了這個無名函數(shù)。但值得注意的是,函數(shù)表達式本身的書寫方式導致不宜維護,因此如果沒有特別需要毋須將函數(shù)寫為匿名函數(shù)。

五:arguments
AS3函數(shù)使用中,可以給函數(shù)傳入一系列的參數(shù),如:
function sub(par1:int,par2:int)
{
.....
}
在這之中,當參數(shù)傳入函數(shù)調(diào)用之后,AS3編譯器會生成一個名為arguments數(shù)組對象,它保存了當前函數(shù)傳入的參數(shù)的值,可以看作參入?yún)?shù)的備份。
function sub(par1:int,par2:int)
{
?par1 = 3;
?par2 = 4;
?var sub1:int = par1 + par2;
?var sub2:int = arguments[0] + arguments[1];
?trace("函數(shù)參數(shù)之和:" + sub1);
?trace("arguments之和:" + sub2);
}
sub(1,2);
/--------
函數(shù)參數(shù)之和:7
arguments之和:3

但這個備份數(shù)組僅限于參數(shù)是按值傳遞的情況下,如參數(shù)是以引用傳遞則arguments的值會跟著改變。
function sub(par:Array)
{
?par[0] = "jack";
?trace("函數(shù)參數(shù):" + par);
?trace("arguments:" + arguments);
}
var arr:Array = new Array(1,2,3);
sub(arr);
/--------
函數(shù)參數(shù):jack,2,3
arguments:jack,2,3

另外,arguments有個重要屬性:callee,就是call自己。如使用該屬性,程序會將arguments所在的當前函數(shù)按照callee的賦值再次執(zhí)行一次
var bool:Boolean = true;
function sub(par:Array)
{
?par[0] = "jack";
?trace("函數(shù)參數(shù):" + par);
?trace("arguments:" + arguments);
?if(bool)
?{
??bool = false;
??var arrbak:Array = new Array("開始執(zhí)行callee",1,1);
??trace("開始執(zhí)行callee");
??arguments.callee(arrbak);
?}
}
var arr:Array = new Array(1,2,3);
sub(arr);
/--------
函數(shù)參數(shù):jack,2,3
arguments:jack,2,3
開始執(zhí)行callee
函數(shù)參數(shù):jack,1,1
arguments:jack,1,1

?

六、重載

一種OOP語言擁有重載特性是很習以為常的事,畢竟任何OOP語言都必須遵循OOP三大特質。有意思的是AS中,重載這樣在其他語言司空見慣的特性,在AS3出現(xiàn)以前都是不存在的(不僅AS,javascript、vbScript、ruby等常見腳本語言都不支持,到底是腳本啊 .... ),且AS3的重載說到底也是模擬重載,一種數(shù)組變通而已。

1:使用aruments的length屬性進行重載

function test(par1:int):void
{
?if(arguments.length == 1)
??trace("重載1");
?else if(arguments.length >1)
??trace("重載2");
?else
??trace("重載3");
}
test(1);
test(1,2);
test(1,2,3);

/--------------------

重載1
重載2
重載2

注意函數(shù)test在聲明時只聲明了 par1:int 一個參數(shù),而在調(diào)用時程序連續(xù)調(diào)用了3次test,并且后兩次參數(shù)與函數(shù)聲明不符,多了。但編譯器如果運行在標準模式下編譯,是不會報錯也可以運行的,這樣arguments數(shù)組會擴大為你傳進來參數(shù)的個數(shù),如test(1,2,3),arguments長度就是3了,程序中如果需要用到2、3,只能通過arguments[1]/[2]來找到多出的參數(shù)。用arguments時,注意編譯器一定要運行在標準模式下;參數(shù)只能比函數(shù)聲明多,不能少。

?

2:使用 ...(args) 來傳入不同參數(shù)。

注意:...(args) ,前面是3點,英文模式下的3點,不多不少。args是傳進來參數(shù)數(shù)組的名稱,可以任意。

function test(...args):void
{
?if(args.length == 1)
??trace("重載1");
?else if(args.length >1)
??trace("重載2");
?else
??trace("重載3");
}
test(1);
test(1,2);
test(1,2,3);

/--------------------

重載1
重載2
重載2

?

當使用...args ,在程序中就不能用arguments來獲取參數(shù)了,取而代之是args。...args 也可以與聲明參數(shù)一起使用

function test(par1:int,...args):void
{
?if(args.length == 1)
??trace("參數(shù)" + par1 + "? 重載1? args參數(shù):" + args);
?else if(args.length == 2)
??trace("參數(shù)" + par1 + "? 重載2? args參數(shù):" + args);
?else
??trace("參數(shù)" + par1 + "? 重載3? args參數(shù):" + args);
}
test(1,1);
test(1,2,3);
test(1,2,3,4,5);

/---------------------

參數(shù)1? 重載1? args參數(shù):1
參數(shù)1? 重載2? args參數(shù):2,3
參數(shù)1? 重載3? args參數(shù):2,3,4,5

這樣也變通模擬了函數(shù)重載,args是不需要編譯器標準的無論在嚴謹或標準模式都可運行;args使用后arguments不能使用包括其屬性;在給已聲明參數(shù)賦值后,接下來無論多少個參數(shù)編譯器都會將其作為數(shù)組傳給args。

轉載于:https://www.cnblogs.com/sun11086/archive/2009/12/05/1617385.html

總結

以上是生活随笔為你收集整理的[转]AS3 与 其他语言 的一些不同点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 嫩草伊人| 91精产国品一二三 | 国产成人av免费观看 | 国产熟妇另类久久久久 | 色婷婷狠狠操 | 熟睡侵犯の奶水授乳在线 | 中文字幕大全 | 欧美做受高潮动漫 | 亚洲激情二区 | 国产一区二区三区视频播放 | 黄色网址在线免费看 | 国产激情久久久 | 超碰在线综合 | 成人a毛片| 国内av在线 | 俄罗斯色片 | 成熟女人毛片www免费版在线 | 国产第一页在线播放 | 精品欧美一区二区三区成人 | 亚洲免费在线视频观看 | 日韩成人精品在线 | 艳母免费在线观看 | 日本精品黄 | 国产精品欧美激情在线 | 美女xx网站| 中文字幕高清在线免费播放 | 国产精品刘玥久久一区 | 欧美激情欧美激情在线五月 | 性色综合| 久久蜜桃视频 | 男女洗澡互摸私密部位视频 | av免费视屏 | 123毛片| 午夜精品久久久久久久久久久久久蜜桃 | 国产精品久久毛片av大全日韩 | 嫩草视频一区二区三区 | 五月天丁香 | 天天干天天添 | 中文在线一区二区三区 | 成人免费毛片果冻 | 久久久久久av无码免费网站下载 | 99精品一级欧美片免费播放 | 毛片a级片 | 日本爽爽爽爽爽爽在线观看免 | 一级看片 | 在线视频 日韩 | 久久国产成人精品国产成人亚洲 | www.狠狠插 | 国产激情视频网站 | 日韩网站免费观看高清 | 欧美一级片免费 | 色婷婷av一区二区三区麻豆综合 | 中文字幕观看 | 中文字幕一区二区三区四区免费看 | 国产一区精品在线 | 人人射人人爱 | 免费看黄色的网址 | 一区二区免费av | 久久99精品国产.久久久久久 | 国语对白久久 | 一二三四精品 | 中文字幕免 | 亚洲色图制服诱惑 | 国产69精品久久久久777 | 久久综合一区二区三区 | 久久成年人视频 | 欧美黄色特级片 | 波多野结衣一区二区三区高清av | 日韩乱码人妻无码中文字幕 | 国产91香蕉| 国产原创精品 | 蜜桃视频一区二区 | 亚洲日本激情 | 久久精品国产亚洲AV熟女 | 少妇特殊按摩高潮惨叫无码 | 日韩精品1区2区 | 美女黄视频在线观看 | 美女扒开屁股让男人桶 | 精品无码久久久久成人漫画 | 国产精品成人va在线观看 | 亚色影库| 99精品人妻少妇一区二区 | 国产91熟女高潮一区二区 | 国产情侣第一页 | 精品久久久久久久久久久国产字幕 | 国产一区二区在线观看视频 | xxxxⅹxxxhd日本8hd | 天天插天天射天天干 | 欧美一区二区在线看 | 国产在线精品一区二区 | 精品在线第一页 | 精品人妻一区二区三区在线视频 | 一区二区男女 | 奇米在线777 | 大香焦久久 | 天堂va欧美ⅴa亚洲va一国产 | 午夜免费福利小电影 | 亚洲一区中文字幕永久在线 | 极品新婚夜少妇真紧 |