私は両方の言語が同じECMA-262標準からのものであることを知っています。 JavaScriptがEMCAScript-262 5th editionなどのfreeze
やseal
などのメソッドを介してコアObjectインスタンスのイベントリスナーを追加することで、この2つは非常に似通ったものになっているようです。違いは何だろうと思っていましたか?
まず、ActionScript 3とJavaScriptはどちらも ECMA-262 で定義されているため、多くの共通点があります。どちらの言語も、たとえばプロトタイプ継承を特徴としています。ただし、ActionScriptが ES4 を完全に実装していることは正しくありません。
ActionScriptは、ECMA-262で定義されていないいくつかの機能と、ES4の一部(ただしすべてではない)を実装しています。
AS3はECMA-262に何を追加するのでしょうか?これらもJavaScriptとの違いです。
多分私はいくつかの機能を忘れました。 XML、XMLListなどがすでに262で定義されているのか、それとも357が付属しているかはわかりません。
ただし、主な違いは標準ライブラリです。 JavaScriptには、DOMElementやブラウザー依存の追加など、いくつかの定義済みクラスが付属しています。 ActionScriptには、ビデオストリーミングなどの機能を備えたかなり大きな標準ライブラリがあり、すべてのプラットフォームで一貫しています。
私はActionScriptとJavaScriptの両方でプログラミングを行ってきましたが、あまり技術的ではない観点から、2つの主な違いがあると思います。
1)JavaScriptはより強力です。言語には「コンパイラ」や型がないため、この言語をさらに使用することができます。 ExtJS や jQuery のような優れたフレームワークがいくつかありますが、それらを使用しても簡単に処理できますが、これらのフレームワークを使用しても、以下の場合は驚くほどのダメージを与えることができます。あなたはしたい。
2)ActionScriptの方がはるかに限定的であるため、保守がはるかに簡単です。アドビは、ECMAScriptの難しい部分からユーザーを保護するために多くの作業を行いました。 ECMAScriptオブジェクト、プロトタイプ継承、およびクロージャは、ActionScriptでプログラミングするために理解する必要のない3つの概念です。 Adobeの「クラス」オブジェクトの使用方法を理解する必要があるだけです。
単純な使い方では、JavaScriptを使用します。ただし、プロジェクトが大きくなると、コーディングする対象が異なります。スクラップのようなスタートアップでプログラミングを行う5人の開発者のチームがいたら、ハートビートでJavaScriptを選択します。ただし、大企業や学界の周囲では、Adobeのプラットフォームを信頼する方が安全な場合があります。
お役に立てば幸いです。
一つはタイプセーフタイプです。 Actionscriptでは、すべてのオブジェクトのタイプを設定する必要がありますが、JavaScriptはそうではありません(つまり、JavaScriptでは、1つの変数が1つのタイプになり、すぐに別のタイプに設定されます)。
Actionscriptはオブジェクト指向です。 JavaScriptでこれを並べ替えることもできますが、Actionscriptではオブジェクトの継承などが可能です。
本質的に私が見つけた主な違いは、ActionScriptはより静的な型付けのクラスベースの言語であり、JavaScriptはプロトタイプ言語であるということです。
残念ながら、ActionScriptには型の推論はないため、型付けされていないものを残すたびにFlex Builderを使用すると警告が表示されます。これは不必要で冗長すぎるため、JavaScriptよりも冗長になるだけでなく、同等のコードがより冗長であることがわかりますC#。
ただし、余分な冗長性により、収量のパフォーマンスが向上し、コンパイル時の型の安全性が向上します。残念ながら、これによりビルド時間も大幅に増加します。Java私がインスタントフィードバックに使用するあらゆるサイズのスクリプトアプリですが、最後のActionScriptプロジェクトのビルド時間は2分を超えていました。
主な違いは、ActionScript 3はクラスベースの継承とプロトタイプの継承の両方をサポートし、クラス名とファイル名の間に名前空間バインディングを適用し、eval
などの一部のグローバルJavaScriptメソッドをサポートしないことです。幸いなことに、ギャップを埋めるためにいくつかのことができます。
ECMAScriptのESまたはActionScript 3のAS3を使用して、名前空間をグローバルに設定できます。
use namespace ES;
use namespace AS3;
AS3名前空間を使用している場合、メソッドのオーバーライドでは、AS3名前空間とオーバーライド属性を使用する必要があります。
AS3名前空間を使用していない場合は、プロトタイプメソッドとpropertyIsEnumerable
を使用できます。
プロパティまたはメソッドのAS3名前空間バージョンを動的関数で選択的に使用できます。
var nums:Array = new Array(1, 2, 3);
nums.AS3::pop();
trace(nums); // output: 1,2
クラスベースの継承をオフにするには、次のコンパイラオプションを使用することもできます:compc -as3=false -strict=false -es=true
import *
class foo
{
dynamic function foo()
{
}
}
AS3名前空間を使用しない場合、コアクラスのインスタンスは、プロトタイプオブジェクトで定義されたプロパティとメソッドを継承します。
AS3名前空間を使用する場合、コアクラスのインスタンスは、クラス定義で定義されたプロパティとメソッドを継承します。
ECMAScript-4とECMAScript-2017以降の共通機能は次のとおりです。
Feature ES4/ES6 + ES4 Only Rest parameter☑ Destructuring☑ ByteArrays☑ Class☑ Interface☑ 静的フィールド☑ パラメータのデフォルト☑ レストパラメータ☑ バインドされたメソッド☑ 動的 この 値☑ 複数 キャッチ 句☑ short-circuit-and(&& =)☑ short-circuit-or(|| =)☑ Type Annotations☑
参照
開発者の観点から、最も重要なこと:
1)Javascriptは実際にはOOPではありません。superキーワードはありません。つまり、何かをオーバーライド(何らかの方法で)した場合、superを介してそれを呼び出すことはできません。これは、OOPが鍵であり、Actionscript3はすべてOOPです。何百万行ものActionscript3コードを連携させ、適切に管理できます。
2)Actionscript3は、Adobeからの実装が1つしかないFlash Playerで実行されます。つまり、すべてのブラウザー(Flash Playerがインストールされている限り)は常に一貫していますが、JavaScriptはブラウザーで直接実行されますが、各ブラウザーには独自の実装があります。つまり、Javascriptコードは、確実に機能するために、すべてのターゲットブラウザに対してテストする必要があります。