2

次のような方法がある場合:

private function testMethod(param:string):void
{
  // Get the object that called this function
}

testMethod 内で、どのオブジェクトが私たちを呼び出しているかを特定できますか? 例えば

class A
{
  doSomething()
  {
    var b:B = new B();
    b.fooBar();
  }
}

class B
{
  fooBar()
  {
    // Can I tell that the calling object is type of class A?
  }
}
4

5 に答える 5

6

申し訳ありませんが、答えはノーです(以下の編集を参照)。関数は呼び出される特別なプロパティを受け取り、argumentsAS2 では、caller大まかに必要な処理を行うプロパティを持っていました。引数オブジェクトは引き続き AS3 で使用できますが、caller プロパティは AS3 (したがって Flex 3) から削除されたため、必要なことを直接実行する方法はありません。引数の代わりに [...rest パラメータ]( http://livedocs.adobe.com/flex/3/langref/statements.html#..._(rest)_parameter)言語機能を使用することもお勧めします。.

この件に関する参考文献は次のとおりです (callee を検索して、関連する詳細を見つけてください)。

編集:さらなる調査により、現在実行中の関数のスタックトレースを取得できることが示されているため、運が良ければそれで何かを行うことができます. 詳細については、このブログ エントリこのフォーラムの投稿を参照してください。

ブログ投稿の基本的な考え方は、エラーをスローしてすぐにキャッチし、スタック トレースを解析することです。醜いですが、うまくいくかもしれません。

ブログ投稿のコード:


var stackTrace:String;

try { throw new Error(); }
catch (e:Error) { stackTrace = e.getStackTrace(); }

var lines:Array = stackTrace.split("\n");
var isDebug:Boolean = (lines[1] as String).indexOf('[') != -1;

var path:String;
var line:int = -1;

if(isDebug)
{
    var regex:RegExp = /at\x20(.+?)\[(.+?)\]/i;
    var matches:Array = regex.exec(lines[2]);

    path = matches[1];

    //file:line = matches[2]
    //windows == 2 because of drive:\
    line = matches[2].split(':')[2];
}
else
{
    path = (lines[2] as String).substring(4);
}

trace(path + (line != -1 ? '[' + line.toString() + ']' : ''));
于 2008-10-11T22:26:03.960 に答える
4

stackTrace は Flash Player のデバッガー バージョンでのみ使用できることを知っておくことが重要です。ごめん!:(

于 2009-01-27T22:01:46.427 に答える
1

これは誰かを助けるかもしれません、私にはわかりません...しかし、これを使用している場合、Eventこれはe.currentTarget次のように使用して可能です:

private function button_hover(e:Event):void
{
      e.currentTarget.label="Hovering";
}
于 2009-06-06T01:07:55.607 に答える
1

次に、「callingObject」パラメーターを明示的に渡すというアイデアを紹介します。本当にトリッキーなことをしているのでない限り、とにかく、呼び出し元がターゲットオブジェクトを提供できる方が良いはずです。(これが明白だと思われる場合は申し訳ありませんが、あなたが何を達成しようとしているのかわかりません。)

于 2008-10-12T00:20:10.033 に答える
1

James のややあいまいな最初の段落に付け加えると、Arguments プロパティは Function オブジェクト内で引き続き使用できますが、caller プロパティは削除されています。

ドキュメントへのリンクは次のとおりです。http://livedocs.adobe.com/flex/3/langref/arguments.html

于 2008-10-12T07:23:49.960 に答える