2011-09-13 9 views
4

クラスまたは関数オブジェクトのプロトタイプオブジェクトへの参照。 prototypeプロパティが自動的に作成され、作成するクラス または関数オブジェクトにアタッチされます。 が、作成するクラスまたは関数に固有であるという点で、このプロパティは静的です。たとえば、 クラスを作成した場合、prototypeプロパティの値は、クラスのすべてのインスタンス によって共有され、クラスプロパティとしてのみアクセスできます。 クラスのインスタンスはプロトタイププロパティに直接アクセスできません。AS3プロトタイプ - 静的変数ですか?

クラスのプロトタイプオブジェクトは、 が クラスのすべてのインスタンスにわたって状態を共有するためのメカニズムを提供するそのクラスの特別なインスタンスです。実行時に、クラスインスタンスでプロパティが見つからない場合、 クラスプロトタイプオブジェクトであるデリゲートが プロパティでチェックされます。プロトタイプオブジェクトにプロパティが含まれていない場合、 プロセスは、Flash Playerまたは Adob​​e Integrated Runtimeがプロパティを検出するまで、プロトタイプオブジェクトのデリゲートを の階層で連続してチェックし続けます。

注:ActionScript 3.0では、プロトタイプの継承は、継承のための基本的な メカニズムではありません。 ActionScript 3.0の の継承メカニズムは、クラス定義の固定プロパティの継承を実現するクラス継承です( )。

このように、プロトタイプは静的変数であるという印象を受けます。私は正しいのですか?

答えて

7

プロトタイプとして実装された関数は、必ずしもインスタンスメソッドとして実行されるわけではありません。静的関数では、thisへのアクセス権がありません。

また、プロトタイプの値を設定することは、すべてのインスタンスの値を設定することではありません。そのクラスのオブジェクトが明示的に設定していない場合は、代替値のみです。

var o1:Object= {}; 
var o2:Object= {}; 
Object.prototype.foo = "foo"; 

o1.foo = "bar" 

trace(o1.foo) // bar 
trace(o2.foo) // foo