我有 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/