获取方法调用者引用的通用方法?

时间:2010-12-21 16:35:31

标签: actionscript-3

我有两个代表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!"
        }
    }
}

4 个答案:

答案 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.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/

答案 2 :(得分:0)

我想你想知道调试目的的调用者。如果是这样,我建议在方法/函数中设置断点而不是跟踪。当代码中断时,您可以回溯调用者以及更多内容。适用于Flash IDE和Flashbuilder。如果您不熟悉断点,Google可以使用“as3断点”。

答案 3 :(得分:0)

以下是关于使用arguments.callee

的官方Adobe文章

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/arguments.html

它包含示例代码。

希望这有帮助。