2

これらの3つの宣言に違いはありますか?

var x;
var y:Object;
var z:*;

ASにそうでないものはありObjectますか?

4

4 に答える 4

3

var x;var x:*;コンパイラにとってまったく同じことを意味します。変数は任意の型を受け入れることができます。:*コードの可読性を高めるために、型を省略するのではなく使用してください。

var x:Object;お気づきのように、すべてがObjectから派生しているため、実際には同等です。ただし、コンパイラはそれを異なる方法で処理し、オブジェクト以外のプロパティにアクセスしている場合は少し遅くなる傾向があります。さらに、他の回答で指摘されているようundefinedに、オブジェクトに割り当てようとすると、自動的ににキャストされnullます。

:*変数が複数の無関係なタイプの値を受け入れることができる:Object場合に使用し、オブジェクトを連想配列として使用する場合に使用することをお勧めします。

于 2010-08-02T17:00:26.780 に答える
2

値を取得したい場合undefinedは、タイプを使用してください。Objectvarundefined*

var a:*=undefined;
trace(a); // will trace undefined

var b:Object=undefined; // you will have a warning at compile time
trace(b); // will trace null
于 2010-08-02T19:18:53.387 に答える
1

主な違いは、名前空間を*割り当てることができるundefinedのに対し、Objectできないことです。他のすべては両方にとって問題ありません。

AVM内に多少の奇妙な点Objectがあるため、可能な限り使用することをお勧めします。*

于 2010-08-02T19:22:16.170 に答える
-1

コードでは、xは入力されず、yはObjectクラス(すべてのActionScriptクラスの基本クラス)として入力され、zは任意のタイプのクラスとして入力されます。これの結果は、これらの変数のパブリックメンバーを参照する必要があるときはいつでも、使用しようとしているクラスのインスタンスとしてそれらをキャストする必要があるか、または(yオブジェクトの場合、その他の場合も)型なし変数)y.hasOwnProperty("propertyName")参照する前にテストする必要があります。

通常、複数のタイプのクラスを取ることができるメソッド引数には*のみが表示されます。たとえば、次のようなイベントハンドラーがあるとします。

private function myHandler(event:*) : void {
  //statements
}

ここで、eventは任意のタイプのイベントを参照でき、メソッドのコードは、それを使用して何かを行う前に、どのタイプであったかを判別します。

于 2010-08-02T16:57:28.067 に答える