JavaScript與ActionScript3兩者的同性與差異性
javascript和actionscript是基于什么標(biāo)準(zhǔn)的,大家知道嗎?
ActionScript 和 JavaScript 共享一個(gè)常用標(biāo)準(zhǔn):ECMAScript。因此,如果您曾經(jīng)用 JavaScript 編寫(xiě)過(guò)一個(gè)條件(“if 語(yǔ)句”)或迭代(“循環(huán)語(yǔ)句”),則您可以使用 ActionScript。記住 JavaScript 和 ActionScript 一樣是區(qū)分大小寫(xiě)的。
先來(lái)看看二者的同性與差異性:
共同點(diǎn):
a)、二者語(yǔ)法相似,都遵循ECMAScript標(biāo)準(zhǔn)(點(diǎn)擊查看ECMAScript5.1中文版);
b)、均可在客戶端上運(yùn)行,是構(gòu)建RIA應(yīng)用的較為流行的編程語(yǔ)言;
差異:
a)、二者操作的顯示不同:JavaScript操作DOM對(duì)象,ActionScript3.0操作的是DisplayObject;
b)、運(yùn)行環(huán)境不同:JavaScript需要JavaScript引擎進(jìn)行解析、執(zhí)行,ActionScript3需要Adobe的flash player(AVM2)進(jìn)行解析;
c)、ActionScript3.0引入OOP概念,可使用extends實(shí)現(xiàn)繼承,而JavaScript只能使用基于原型的方式來(lái)實(shí)現(xiàn);
d)、應(yīng)用的領(lǐng)域有所不同:JavaScript目前主要應(yīng)用于web頁(yè)面(PC端、手機(jī)終端等),而ActionScript3.0在網(wǎng)頁(yè)游戲上的應(yīng)用則比較多;
題外話(個(gè)人想法僅供參考):?jiǎn)螐膱?bào)酬上來(lái)講,as3的浮動(dòng)比js要大,如果你參與開(kāi)發(fā)的一款網(wǎng)頁(yè)游戲月充值流水超過(guò)了五百萬(wàn)(到各大頁(yè)游平臺(tái)上看看開(kāi)服量,單服月充值按5~10W來(lái)算,如果開(kāi)到100組,廣告成本頁(yè)游大概在2~15元/注冊(cè)人),一般獎(jiǎng)金都還比較可觀(項(xiàng)目的前后臺(tái)主程可能多一些,分配比例各公司肯定有自己的協(xié)議)。但大多數(shù)“創(chuàng)業(yè)型”的小公司進(jìn)行網(wǎng)頁(yè)游戲開(kāi)發(fā),難以發(fā)展壯大,關(guān)門(mén)的居多,這就意味著風(fēng)險(xiǎn)較高。而招前端的,大公司的大門(mén)隨時(shí)為你敞開(kāi)著(薪資也還不錯(cuò))。希望我在三十歲以前,有機(jī)會(huì)寫(xiě)一篇親歷參與“創(chuàng)業(yè)”的經(jīng)歷,從js前端轉(zhuǎn)as3前端的歷程,也算是送給自己三十歲生日的一份禮物:)
關(guān)于創(chuàng)業(yè)、轉(zhuǎn)崗、管理,有機(jī)會(huì)一并寫(xiě)出自己的想法,現(xiàn)在還不太成熟,扯遠(yuǎn)了,還是單純回到技術(shù)上來(lái)吧。既然是那些事,那么JavaScript與ActionScript3肯定是有一些交集的,這里以基于瀏覽器的應(yīng)用場(chǎng)景來(lái)進(jìn)行歸納:
1、as3獲取網(wǎng)頁(yè)傳遞過(guò)來(lái)的參數(shù);
2、js與as3的相互調(diào)用;
從“渲染swf” 開(kāi)始講起,先使用JS判斷當(dāng)前瀏覽器是否安裝了flash player,然后獲取其版本,是否滿足最低flash player的版本,然后動(dòng)態(tài)創(chuàng)建dom節(jié)點(diǎn),并追加到頁(yè)面中。點(diǎn)擊查看《JavaScript檢測(cè)flash player的版本號(hào)》
渲染swf,一般使用swfobject.js (注意swfobject.js的版本,ver1.5與ver2.0+用法上差異較大),相關(guān)文檔在這里>>
頁(yè)面?zhèn)鬟f給swf的參數(shù),有二種方式:
1、路徑參數(shù):<param name=”movie” value=”xxx.swf?v….”/> <embed src=”xxx.swf?v…” />
2、使用flashvars:<param name='”flashvars” value=”…” /> <embed src=”xxx.swf” flashvars=”…” />
as3獲取參數(shù)root.loaderInfo.parameters或stage.loaderInfo.parameters
flex生成的swf通過(guò)Application.application.parameters可直接獲取
如果使用as3的“殼”加載flex生成的swf,假定as3的“殼”中定義如下的代碼:
public var param_obj:Object; param_obj = this.loaderInfo.parameters;
那么flex生成的swf獲取參數(shù)的方法:
var system_Obj:Object = Object(SystemManager(SystemManager.getSWFRoot(this)).getTopLevelRoot()); var obj:Object = system_Obj.param_obj;
示例代碼(as3):
package { import flash.display.Sprite; import flash.events.Event; import flash.external.ExternalInterface; /** * ... * @author Meteoric_cry */ public class Main extends Sprite { public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point initView(); } private function initView():void { var obj:Object = this.loaderInfo.parameters; var kk:String = obj['kk']; if (ExternalInterface.available) { ExternalInterface.call('alert', kk); } } } }
HTML代碼:
<!DOCTYPE html><html><head><title>test</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head><body><div id='myId'><p><a >Get Adobe Flash player</a></p></div><script type="text/javascript" src="swfobject.js"></script> 1: 2: <script type="text/javascript"> 3: var flashvars = { 4: 'kk' : '你才是kk' 5: }; 6: 7: var params = { 8: menu: "false", 9: scale: "noScale", 10: allowFullscreen: "true", 11: allowScriptAccess: "always", 12: bgcolor: "", 13: wmode: "direct" // can cause issues with FP settings & webcam 14: }; 15: 16: var attributes = { 17: 'id' : 'xx', 18: 'name' : 'xx' 19: }; 20: 21: swfobject.embedSWF("http://b.com/js_swf/jsas.swf", "myId", "100%", "100%", "9.0.0", "expressInstall.swf", flashvars, params, attributes);</script></body></html>
上面的參數(shù)“allowScriptAccess”的值有三個(gè):always、sameDomain、never
默認(rèn)值是:sameDomain,即允許同域下的swf調(diào)用js函數(shù),如果設(shè)置為never則完全不允許調(diào)用,而always則無(wú)任何限制,swf可直接調(diào)用。
如果更改上面頁(yè)面的參數(shù)allowScriptAccess的值為“sameDomain”,會(huì)出現(xiàn)如下的情況:
如果頁(yè)面需要加載遠(yuǎn)程的swf文件,如果需要swf讓js進(jìn)行調(diào)用,則需要在代碼中加上:
Security.allowDomain("*");
Security.allowInsecureDomain("*");
后再進(jìn)注冊(cè):ExternalInterface.addCallback('jsCallback', jsCallback); 否則調(diào)用將會(huì)失?。ú粫?huì)拋出異常)
AS3調(diào)用JS所使用的方法:ExternalInterface.call
而JS調(diào)用AS3需要在AS3內(nèi)先“注冊(cè)”,而且必須要等待swf加載、注冊(cè)完之后,才能調(diào)用它的方法
AS3內(nèi)進(jìn)行注冊(cè):ExternalInterface.addCallback(‘fnName', fnName);
其中fnName為SWF對(duì)外“開(kāi)放”的接口,而JS直接使用(document[‘swfName'] || window[‘swfName']).fnName();調(diào)用即可,和調(diào)用JS函數(shù)一樣,需要傳遞參數(shù)直接在函數(shù)調(diào)用符“()”內(nèi)加入相應(yīng)的參數(shù)即可。
IE下可通過(guò)查看節(jié)點(diǎn)工具,查看swf“公開(kāi)”出來(lái)的方法,其它瀏覽器無(wú)法直接查看
之前我也寫(xiě)過(guò)一些關(guān)于as與js相關(guān)的文章:
flash在網(wǎng)頁(yè)應(yīng)用中的一些特殊應(yīng)用場(chǎng)景>>
chrome、ff下flash的mousewheel事件失效(wmode=transparent)>>
js與as相互調(diào)用,一個(gè)比較典型的應(yīng)用:跨瀏覽器的音樂(lè)播放器(列表使用js呈現(xiàn),swf對(duì)外“公開(kāi)”播放、暫停、停止等方法)
以上所述是小編給大家介紹的JavaScript與ActionScript3兩者的同性與差異性,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
JavaScript子窗口調(diào)用父窗口變量和函數(shù)的方法
這篇文章主要介紹了JavaScript子窗口調(diào)用父窗口變量和函數(shù)的方法,涉及JavaScript窗口調(diào)用的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
JS如何將當(dāng)前日期或指定日期轉(zhuǎn)時(shí)間戳
這篇文章主要介紹了js將當(dāng)前日期或指定日期轉(zhuǎn)時(shí)間戳超詳細(xì),通過(guò)實(shí)例代碼介紹了JS時(shí)間戳轉(zhuǎn)換方式,需要的朋友可以參考下2023-05-05
bootstrap-table后端分頁(yè)功能完整實(shí)例
這篇文章主要介紹了bootstrap-table后端分頁(yè)功能,結(jié)合完整實(shí)例形式分析了bootstrap-table后端請(qǐng)求、數(shù)據(jù)分頁(yè)功能具體步驟與實(shí)現(xiàn)技巧,需要的朋友可以參考下2020-06-06
JavaScript設(shè)計(jì)模式之工廠模式和抽象工廠模式定義與用法分析
這篇文章主要介紹了JavaScript設(shè)計(jì)模式之工廠模式和抽象工廠模式,結(jié)合實(shí)例形式分析了工廠模式的功能、定義、相關(guān)問(wèn)題解決方法,并分析抽象工廠模式與工廠模式的不同之處,需要的朋友可以參考下2018-07-07
Bootstrap頁(yè)面標(biāo)題Page Header的實(shí)現(xiàn)方法
這篇文章主要為大家詳細(xì)介紹了Bootstrap頁(yè)面標(biāo)題Page Header的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03

