我有两个代表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 :(得分:3)
知道你为什么需要它会有所帮助,因为我觉得你并不是真的。如果该方法是匿名的,则可以使用方法:
上的.apply绑定'this'关键字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"
如果该方法是一个实例方法方法,那么它是一个绑定方法,因此“this”将始终指向它声明的类的实例,无论您是否使用apply方法重新定义它。如果它是一个静态方法,“this”没有意义,编译器会抓住它。
除此之外,没有办法将其声明为参数。在arguments对象上曾经有一个调用者属性,但在发布AS3时它已被弃用。您可以通过arguments.callee获取对函数本身的引用,但这并不是您所要求的。
答案 1 :(得分:2)
在AS3中,您可以抛出错误,然后解析堆栈跟踪以找出详细信息。
您可以在此处查看示例:
如果要查找被调用函数的名称,可以按照以下示例进行操作:
http://www.flashontherocks.com/2010/03/12/getting-function-name-in-actionscript-3/
答案 2 :(得分:0)
我想你想知道调试目的的调用者。如果是这样,我建议在方法/函数中设置断点而不是跟踪。当代码中断时,您可以回溯调用者以及更多内容。适用于Flash IDE和Flashbuilder。如果您不熟悉断点,Google可以使用“as3断点”。
答案 3 :(得分:0)
以下是关于使用arguments.callee
的官方Adobe文章http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/arguments.html
它包含示例代码。
希望这有帮助。