Actionscript 3 では、ドキュメントに次のように記載されているのに、getDefinitionByName() がオブジェクトを返すのはなぜですか。
name パラメータで指定されたクラスのクラス オブジェクトへの参照を返します。
それに基づいて、返されるオブジェクトはオブジェクトではなくクラスである必要があると結論付けます。なぜそうではないのか、誰かが私に教えてもらえますか?
Actionscript 3 では、ドキュメントに次のように記載されているのに、getDefinitionByName() がオブジェクトを返すのはなぜですか。
name パラメータで指定されたクラスのクラス オブジェクトへの参照を返します。
それに基づいて、返されるオブジェクトはオブジェクトではなくクラスである必要があると結論付けます。なぜそうではないのか、誰かが私に教えてもらえますか?
getDefinitionByName は、getDefinitionByName('flash.utils.getDefinitionByName') などの関数を返すこともできます。ただし、これは名前空間レベルの関数でのみ機能し、静的クラス メソッドでは機能しません。
メソッド シグネチャにもかかわらず、 getDefinitionByName はClassを返します。誤解を招くような署名は、Class オブジェクトの前に存在するメソッドによるものだと思います (匿名/拡張オブジェクト インスタンスを返すために使用された場合)。
おそらくAdobeは、この関数がFlashPlayerの将来のバージョンで異なる値を返す可能性があると考えていました。たとえば、ActionScriptのベースとなっている標準であるECMAScriptは、歴史的Function
に、クラスのようなオブジェクトの基礎としてプロトタイプを備えたオブジェクトを使用してきました。ECMAScript標準の最新バージョンの議論中に、実行時に関数ベースのクラスを「フリーズ」してコンパイル時Class
オブジェクトのようなものにするための推測がありました。それらの定義名も指定できるとしたらどうでしょうか。Class
それらはこの時点で実際にタイプですか、それともまだタイプFunction
ですか?私の意見では、おそらく後で。'Class'と'Function'の両方の参照は、として一般化できるObject
ため、このコンテキストでは戻り型が意味をなします。
注:この説明は、 ECMAScript仕様wikiおよびさまざまな委員会メンバーのブログで読んだ内容に基づく純粋な推測です。