AS3 - 我可以访问给我打电话的对象(或函数)吗?

时间:2010-03-15 15:04:15

标签: actionscript-3 function callback

我用Python问了this同样的问题。

现在我想知道这是否可以在AS3中完成。

如果我有这样的话:

package
{
    public class SomeClass
    {
        private function A():void { C() }
        private function B():void { C() }

        private function C():void
        {
            // who is the caller, A or B ???
        }

        public function SomeClass()
        {
            A()
            B()
        }
    }
}

尽管存在设计或其他问题,但这只是一个探究性思维的问题。

注意:我喜欢访问调用函数的实例,因此我可以调用该调用函数(如果我愿意)

注2:必须在不更改function C()签名

的情况下完成此操作

2 个答案:

答案 0 :(得分:5)

“与以前版本的ActionScript不同,ActionScript 3.0没有arguments.caller属性。要获取对调用当前函数的函数的引用,必须将对该函数的引用作为参数传递。”

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

这是你能做到的唯一方法,否则你需要创建一个全局变量来告诉函数调用C

答案 1 :(得分:1)

当然可以做到。你可以做点什么

private function C():void
{
  var e:Error = new Error();
  var stack:String = e.getStackTrace();
  //analyze stack and find out which function called it.
}

这很难看,但它会起作用。