2011-08-16 7 views
2

私は現在Actionscript 3 Bibleを読んでおり、著者はカスタムeventDispatcherクラスが作成された例を示しています。クラスは、後でそれがなどと呼ばれていたコードで使用される場合:ActionScript 3:カスタムeventDispatcherをインスタンス化するときに、なぜ新しいキーワードを省略しますか?

//Thermometer is a custom eventDispatcher that extends the eventDispatcher class. 
var thermometer:Thermometer = Thermometer(event.target); //why no new keyword? 

私は新しいプログラマだと誰かが、これがどのように動作するかを説明することができる場合、私は興味がありましたか?新しいキーワードが省略されているのはなぜですか?他のクラスを拡張するクラスでnewキーワードを省略すると、基本的にスーパークラス(eventDispatcher)コンストラクタを呼び出すだけですか?

答えて

7

これは新しいインスタンスを作成していませんが、キャストです。

イベントオブジェクトのtargetプロパティがEventクラスによってObjectとしてキャストされ、ターゲットが実際にThermometerクラスのインスタンスであることをコンパイラに伝えるために、このスタイルでキャストされます。また、このようにそれを書くことができます:

var thermometer:Thermometer = event.target as Thermometer; 

2は、本質的に同じことを意味しますが、カスタムオブジェクトのコードの提案/完了をサポートしているエディタを使用している場合、それが編集を可能にするため、Class(something)の表記が好まれますあなたのキャストに基づいて提案を提供する

+0

シェーン、返信いただきありがとうございます。私は鋳造についてもう少し詳しく読んでおり、それはすべてもっと意味があります。非常に高く評価。 :o) – Michael

+2

C#の "as"演算子と同様に、ActionScript3の "as"演算子[オブジェクトが目的の型に正しくキャストできない場合はnullを返します](http://stackoverflow.com/questions/ 4108380/as3-how-to-as-as-operator)を使用してください。 "as"を使用しているがヌルチェックを含まないコードは、後ほどバグレポートに終わるでしょう! "as"に注意し、それを酷使しないでください。キャスティングは強力ですが危険です!初心者の魔法使いは、呪文を唱える際に知恵を適用することをお勧めします! –

+0

@John Tobler - 私は何回もキャストしている間にヌル値が原因で発生したエラーを横断して実行しました。 :o) – Michael

関連する問題