2011-12-31 20 views
1

デフォルトのコンストラクタ関数の外で宣言された新しいクラスのデフォルトのコンストラクタ関数内の宣言関数の主な相違点は何ですか?アクセス修飾子へのアクセスは、デフォルトコンストラクタ関数の外で関数を宣言する唯一の理由ですか?コンストラクタ内のAS3関数とコンストラクタ外の関数

ありがとうございます。

答えて

4

あなたはこの意味場合:

public class MyClass { 
    public function MyClass() { 
     function myFunction() : void { 
     } 
    } 
} 

を、次に主な違いは、唯一の可視性ではなく、スコープ:myFunction()は、同じメソッド内から呼び出すことができ、一時的な関数として宣言されています。コンストラクタの実行が終了すると、関数は破棄され、一時変数と同様にガベージコレクトされます。あなたは簡単にこれを確認することができます:単に "普通の"メンバ関数を追加し、そこからmyFunction()を呼び出すようにしてください - コンパイルは失敗します。もちろん、別のクラスの関数にアクセスしようとします。

関数を変数として宣言し、コンストラクタ内から初期化することを言及していた場合、主な違いは型の安全性です。我々は、厳密に型指定されたパラメータと厳密に型指定された戻り値の型とメンバ関数を宣言した

public class MyClass { 
    public function myFunction (param1:String) : String { 
     // doSomething 
     return myString; 
    } 
    public function MyClass() { 
    } 
} 

は、この規格の宣言を考えてみましょう。宣言に準拠しない方法でこの関数にアクセスしようとすると、コンパイラはエラーをスローし、コンパイルは期待どおりに失敗します。

今コンストラクタ内から同じ宣言:

public class MyClass { 
    public var myFunction : Function; 
    public function MyClass() { 
     myFunction = function (param1:String) : String { 
      // doSomething 
      return myString; 
     } 
    } 
} 

我々はメンバ関数上記と同じことを行うために初期化されているタイプ機能の厳密に型指定されたメンバ変数を宣言しました。

myClassInstance.myFunction ("whatever", "and", "some", "more"); 

コンパイラは文句を言わないだろう。たとえば、あなたはあまりにも多くのパラメータを指定する機能にアクセスしよう - しかし、その厳密に型指定されたパラメータや戻り値の型は宣言の範囲内で、コンパイラによって評価されていますコンパイル時ではなく、実行時にパラメータと戻り値の両方の型がチェックされるようになりました(もちろんエラーは残っています)。したがって、このアプローチの主な欠点は、コンパイル時の型チェックの欠如です。実行時にエラーが発生し、デバッグするのが難しくなります。このアプローチの

一つの利点は、私たちはいつでもこの機能を交換することができることである:

myClassInstance.myFunction = function (i:int) : void { trace (i); }; 

これは完全に合法であると明らかに大幅にオブジェクトの動作を変更します。メンバー関数の例で同じことをすると、コンパイラはエラーもスローします。

+0

さまざまな点をご説明いただきありがとうございます。私は何をしているのか、なぜ私はそれをやっているのかを理解するのに役立ちます。 – IneedHelp

+0

また、クラスメソッドもバインド関数ですが、プロパティ関数はバインドされていません。 –

関連する問題