JavaScript と ActionScript3.0 の違いについて考察。
Adobeからダウンロードできるマニュアルの dev_guide_html.pdf のp.122(正確なPDFのページ数では129p)から「Differences between ActionScript and JavaScript: an
overview」という項目があり、詳しく載せられています。
要約すると以下の感じです。
ActionScript3.0では、変数の型付けを行うことができます。変数宣言「var」で「var 変数名:型名」のようにして変数の型付けを行います。以下は、関数をActionScript3.0用に書き直したものです。例を見てみましょう。以下は、Adobe AIRでMP3の再生を行う例です。型付けを行うことで、プログラムの入力ミス(型の間違い)を検出することができるので、安心してプログラムを作ることができます。また、プログラミングの時に強力な入力補完機能を使うことができます。
// JavaScript の場合
var file = new air.File("test.mp3"); var sound = air.Sound(file); sound.play();
// ActionScript3.0の場合
var file:File = new File("test.mp3"); var sound = new Sound(file); sound.play();
JavaScriptは、プロトタイプベースでしたが、ActionScript3.0では、クラスベースでプログラムを作ることができます。これにより、Javaに近い形となりました。
public class ExampleClass { public var x:Number; public function ExampleClass(input:Number):void { x = input; } public function greet():void { trace("The value of x is: ", x); } }
ActionScript3.0にはパッケージとネームスペースがあります。パッケージにより、Flash の各機能がカテゴリごとに分かれています。また、クラスのプロパティごとに、public、private、protected、internal のように、ネームスペースを指定することができます。
ActionScript3.0では、以下のように、関数を定義した時に、引数にデフォルト値が定義できるようになっています。
function root(n:Number, p:Number = 1):Number { return Math.pow(n, 1/p); }
また、JavaScript でも似たようなことはできますが、明確に可変引数をもつ関数を定義できます。
function average(... args) : Number{ var sum:Number = 0; for (var i:int = 0; i < args.length; i++) { sum += args[i]; } return (sum / args.length); }
イベントモデルが統一されています。「object.addEventListener(イベント名, 処理を行う関数);」の形式でイベントを登録します。
以上、dev_guide_html.pdf の「Differences between ActionScript and JavaScript: an
overview」を読んでの要約と(勝手な感想)でした。
その他、ECMAScriptのバージョンや対応状況は、Wikipedia に詳しく載せられていました。
こちらも転載&ちょっと修正したものが以下になります
アプリケーション | 呼び方 | バージョン | 準拠するECMAScript |
Mozilla(Firefox 2) | JavaScript | 1.7 | ECMA-262 3rd edition と ECMA-357(*2) |
Internet Explorer 7 | JScript | 5.7 | ECMA-262 3rd edition |
Opera 9 | JavaScript/ECMAScript | なし | ECMA-262 3rd edition |
Safari3 / AIR1 | JavaScript | なし | ECMA-262 3rd edition |
Microsoft .NET | JScript .NET | 8.0 | ECMA-262 4th草案(*1) |
Adobe Flash9/Flex3 | ActionScript | 3 | ECMA-262 4th草案とECMA-357(*2) |