質問

Actionscript 3では、ドキュメントが次のように言っているときにgetDefinitionByName()がObjectを返すのはなぜですか:

  

nameパラメーターで指定されたクラスのクラスオブジェクトへの参照を返します。

それに基づいて、返されるオブジェクトはObjectではなくClassであると結論付けます。なぜそうではないのかを誰かに教えてもらえますか?

役に立ちましたか?

解決

getDefinitionByNameは、getDefinitionByName( 'flash.utils.getDefinitionByName')などのFunctionを返すこともできます。 ただし、これは名前空間レベルの関数でのみ機能し、静的クラスメソッドでは機能しません。

他のヒント

メソッドのシグネチャにもかかわらず、getDefinitionByNameはクラスを返します。誤解を招く署名は、Classオブジェクトの前に存在するメソッド(匿名/拡張オブジェクトインスタンスを返すために使用される場合)によるものだと思います。

おそらく、Adobeはこの関数がFlash Playerの将来のバージョンで異なる値を返す可能性があると考えました。たとえば、ActionScriptのベースとなる標準であるECMAScriptは、歴史的に Function オブジェクトを使用し、プロトタイプをクラスのようなオブジェクトの基礎として使用していました。 ECMAScript標準の最新バージョンの議論中に、「フリーズ」の疑いがありました。実行時に関数ベースのクラスを作成して、コンパイル時の Class オブジェクトのようなものにします。それらの定義名も指定できたらどうでしょうか?この時点で実際にタイプは Class ですか、それともタイプまたは Function ですか?私の意見では、おそらく後者です。 「クラス」と「関数」の両方の参照は Object として一般化できるため、このコンテキストでは戻り値の型が意味を持ちます。

注:この説明は、 ECMAScript仕様wikiで読んだ内容に基づいた単なる推測です。 a>およびさまざまな委員会メンバーのブログ。

scroll top