2010-12-21 2 views
3

2 개체를 나타내는 2 개의 클래스가 있습니다. "whoCalledMe"함수에서, 어떤 객체가 함수를 호출했는지를 알아 내고 싶습니다 (인수로 정보를 전달하지 않고). 나는 찾고있는 참조를 줄 수있는 "전화 거는 사람"속성을 사용했습니다. 거기에서 호출자에 대한 참조를 얻을 수있는 일반적인 방법이 있습니까?메서드의 호출자에 대한 참조를 가져 오는 일반적인 방법은 무엇입니까?

package { 
    public class ObjectCallingTheFunction { 
     public var IDENTITY:String = "I'm the calling function!"; 

     public function ObjectCallingTheFunction() { 
      var objectWithFunction:ObjectWithFunction = new ObjectWithFunction(); 
      objectWithFunction.whoCalledMe(); 
     } 
    } 
} 

package { 
    public class ObjectWithFunction { 
     public function whoCalledMe():void { 
      trace(caller.IDENTITY); // Outputs: "I'm the calling function!" 
     } 
    } 
} 
+0

와우,이 질문은 무서운 ... 내가 뭘하고 있었 니? 순환/순환 의존성 (circular/circular dependencies) 또는 유향 비순환 그래프 (directed acyclic graph)를 사용하지 않는 이유. – Pup

답변

3

왜 내가 필요한지 알면 도움이 될 것입니다. 왜냐하면 당신이 정말로 그렇지 않다는 느낌이 들기 때문입니다. "이"항상 것이다 따라서이 방법은 그러나 인스턴스 메서드 방법 인 경우가 바인딩 방법이다,

var foo:Function = function(arg:int):void 
{ 
    trace(this); 
}; 

var bar:Object = { 
    toString: function():String { return "bar"; } 
}; 

var baz:Object = { 
    toString: function():String { return "baz"; } 
}; 

foo.apply(bar); // <-- Prints "bar" 
foo.apply(baz); // <-- Prints "baz" 

과 : 메소드가 익명 인 경우에는 법에 .apply 사용하여 '이'키워드를 바인딩 할 수 있습니다 apply 메소드를 사용하여 재정의했는지에 관계없이 선언 된 클래스의 인스턴스를 가리 킵니다. 정적 메서드 인 경우 "this"는 의미가 없으며 컴파일러에서 catch합니다.

그 외에도 매개 변수로 선언 할 수있는 방법이 없습니다. arguments 객체에는 호출자 속성이 있지만 이전에는 AS3이 릴리스되었을 때 사용되지 않습니다. arguments.callee를 통해 함수 자체에 대한 참조를 얻을 수 있지만, 실제로는 사용자가 요구 한 것이 아닙니다.

0

디버거 용 호출자를 알고 싶습니다. 그렇다면 추적 대신 메서드/함수에 중단 점을 설정하는 것이 좋습니다. 코드가 깨지면 발신자와 더 많은 것을 역 추적 할 수 있습니다. Flashbuilder뿐만 아니라 Flash IDE에서도 작동합니다. Google은 중단 점을 처음 사용하는 경우 'as3 중단 점'을 사용합니다.

+0

디버깅 목적이 아닌 런타임 용도로 알고 싶습니다. – Pup

2

AS3에서는 오류를 throw 한 다음 스택 추적을 구문 분석하여 자세한 정보를 확인할 수 있습니다.

당신은 예를 들어 여기를 확인할 수 있습니다

http://www.actionscript-flash-guru.com/blog/18-parse-file-package-function-name-from-stack-trace-in-actionscript-as3

을 당신이 예를 따를 수 호출 된 함수의 이름을 찾으려면 : 여기

http://www.flashontherocks.com/2010/03/12/getting-function-name-in-actionscript-3/

+0

+1 이것이 가야합니다. – Zevan

+0

불행히도 릴리스 런타임에서 작동하지 않는다고 생각합니다. 또한 OP가 요구 한 것이 확실하지 않더라도 호출자의 인스턴스를 얻지 못할 것입니다. –

관련 문제