actionscript-3 - 获取对方法调用者的引用的通用方法?

标签 actionscript-3

我有 2 个类代表 2 个对象。从“whoCalledMe”函数中,我想找出调用该函数的对象(不将该信息作为参数传递)。我使用了一个虚构的属性“caller”,它会给我我正在寻找的引用。有没有一种通用的方法可以让我从那里获得对调用者的引用?

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!"
        }
    }
}

最佳答案

了解您为什么需要它会有所帮助,因为我感觉您并不需要。如果该方法是匿名的,您可以通过在该方法上使用 .apply 来绑定(bind)“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"

但是,如果方法是实例方法,则它是绑定(bind)方法,因此“this”将始终指向声明它的类的实例,无论您是否使用 apply 方法重新定义它。如果它是静态方法,“this”没有意义,编译器会捕获它。

除此之外,除了将其声明为参数外,别无他法。 arguments 对象上曾经有一个 caller 属性,但是在 AS3 发布时它被弃用了。您可以通过 arguments.callee 获取对函数本身的引用,但这并不是您真正要求的。

关于actionscript-3 - 获取对方法调用者的引用的通用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4501573/

相关文章:

flash - 加密 as3 flash .swf

javascript - 如何在 Flash 应用程序中调用 JavaScript 函数?

actionscript-3 - 检查 actionscript 3 变量类型?

xml - Flex - URLLoader 和 HTTPService

actionscript-3 - 在 SWF 之间传递值

android - flashvars 不适用于 Android 浏览器

actionscript-3 - 如何循环遍历帧号,如果为真则忽略该帧号?

android - 如何使用适用于 Android 的 Adob​​e AIR 设置 Admob

arrays - 如何定义一个包含单个元素的数组?

flash - 使用 Flash + AS3 发布/调试配置