flexプログラミングにおけるActionScript 3について.0のObjectとDictionaryの違い


【質問】最近Flexのプログラミングを行う過程で、JavaのMapのようなオブジェクトがデータを保存して取り出す必要があり、現在ActionScript 3にある.0には2つの選択肢があります.1つはObjectで、もう1つはDictionaryです.果たしてこの2つの方法にはどんな違いがあるのだろうか.使う過程でその効率は少し高いですか?
 
【問題解決】
1、Object
ObjectクラスはActionScript実行時クラス階層のルートにあります.Objectは、構造関数によってnew演算子構文を使用して作成され、動的に付与された属性を有することができる.以下に示すように、オブジェクトにテキスト値を与えることでObjectを作成することもできます.
var obj:Object = {a:"foo", b:"bar"}

                  Object  。

Adobe Integrated Runtimeのすべてのランタイムクラスがruntimeを拡張できる.Objectクラス.
Objectクラスを使用して関連配列を作成できます.重要なのは、関連配列がObjectクラスのインスタンスであり、各キー/値ペアが属性および属性の値で表されることです.関連配列をObjectデータ型として宣言するには、オブジェクトテキストを使用して関連配列を埋め込むこともできます(ただし、宣言する場合のみ).次の例では、オブジェクトテキストを使用して関連配列を作成し、ポイント演算子と配列を使用して演算子にアクセスし、新しい属性を作成して新しいキー/値ペアを追加します.
 var myAssocArray:Object = {fname:"John", lname:"Public"};
 trace(myAssocArray.fname);     // John
 trace(myAssocArray["lname"]);  // Public
 myAssocArray.initial = "Q";
 trace(myAssocArray.initial);   // Q

ActionScript 3.0 : :
  • クラス継承--主な継承メカニズムであり、固定属性の継承をサポートします.固定プロパティは、クラス定義の一部として宣言された変数、定数、またはメソッドです.各クラス定義は、関連するクラス情報を格納する特殊なクラスオブジェクトによって表すことができるようになりました.
  • プロトタイプ継承--以前のバージョンのActionScriptでは唯一の継承メカニズムであり、ActionScript 3.0では継承の代替形式として使用されています.各種類には関連するプロトタイプオブジェクトがあり、プロトタイプオブジェクトのプロパティはクラスのすべてのインスタンスによって共有されます.クラスインスタンスを作成すると、そのクラスのプロトタイプオブジェクトへの参照があります.これは、インスタンスとそれに関連付けられたクラスプロトタイプオブジェクト間のリンクとして使用されます.実行時にクラスインスタンスに属性が見つからない場合は、委任(クラスのプロトタイプオブジェクト)に属性があるかどうかを確認します.プロトタイプオブジェクトに属性が含まれていない場合は、Flash Playerがその属性を見つけるまで、階層内で連続してより高いレベルでプロトタイプオブジェクトの委任チェックを継続します.

  • 次の例に示すように、クラス継承とプロトタイプ継承は同時に存在します.
     class A {
         var x = 1
         prototype.px = 2
     }
     dynamic class B extends A {
         var y = 3
         prototype.py = 4
     }
      
     var b = new B()
     b.x // 1 via class inheritance
     b.px // 2 via prototype inheritance from A.prototype
     b.y // 3
     b.py // 4 via prototype inheritance from B.prototype
      
     B.prototype.px = 5
     b.px // now 5 because B.prototype hides A.prototype
      
     b.px = 6
     b.px // now 6 because b hides B.prototype
    
    , 。 , 。 , , 。

    2、Dictionary

    Dictionary , (=== ) 。 , , toString() 。Dictionary ( ) ( Number) 。
    Dictionary key :
    var dict:Dictionary = new Dictionary(); var obj:Object = new Object(); var key:Object = new Object(); key.toString = function() { return "key" } dict[key] = "Letters"; obj["key"] = "Letters"; dict[key] == "Letters"; // true obj["key"] == "Letters"; // true obj[key] == "Letters"; // true because key == "key" is true because key.toString == "key" dict["key"] == "Letters"; // false because "key" === key is false delete dict[key]; //removes the key

    【 】
    Dictionary , (===) 。 , , toString() 。Dictionary ( ) ( Number) 。
         Object Dictionary , , , Object toString() , , Dictionary , , 2 Object , Dictionary