Apache flex 访问setter的函数对象(闭包)

Apache flex 访问setter的函数对象(闭包),apache-flex,flash,actionscript-3,reflection,Apache Flex,Flash,Actionscript 3,Reflection,假设我有以下类别: class Example { function set something(value:String):void { trace("set something"); } function doSomething():void { trace("something"); } } 我可以将函数作为如下对象访问: var example:Example = new Example(); var a

假设我有以下类别:

class Example
{
    function set something(value:String):void
    {
        trace("set something");
    }

    function doSomething():void
    {
        trace("something");
    }
}
我可以将函数作为如下对象访问:

var example:Example = new Example();
var asdf:Function = example.doSomething;
// this also works - example["doSomething"];

asdf(); // this trace: "something"
例如,您总是在事件中这样做。所以,我的大问题是:有没有办法控制二传手?在对象或其他地方是否有一些我不知道的疯狂函数(请说是:)

我想要如下的东西

var example:Example = new Example();

// the following won't work, because example.something is a string
var asdf:Function = example.something; 
asdf("a value"); // this trace: "something"

语句
var-asdf:Function=example.something将不起作用,因为编译器将
example.something
视为getter并返回字符串(如果getter未实现,则抛出仅写错误)

但由于
某物
是一个属性,因此您可以执行以下操作:

example["something"] = "a value"; //will trace 'set something'
//or
var property:String = "something";
example[property] = "some value"; //will trace 'set something'

语句
var-asdf:Function=example.something将不起作用,因为编译器将
example.something
视为getter并返回字符串(如果getter未实现,则抛出仅写错误)

但由于
某物
是一个属性,因此您可以执行以下操作:

example["something"] = "a value"; //will trace 'set something'
//or
var property:String = "something";
example[property] = "some value"; //will trace 'set something'
你可以试试这个:

class Example{
  function set something(value:String):void{
    trace("set something");
  }

  function doSomething():void{
    trace("something");
  }
}

class AnotherClass{
  function callOtherClassFunction(funcObj:Obj):void{
    if (funcObj.type == "method") {
      funcObj.func.apply();
    }
    else if (funcObj.type == "setter") {
      funcObj.obj[funcObj.func] = "something";
    }
    else if (funcObj.type == "getter") {
      trace(funcObj.obj[funcObj.func]);
    }
  }
}

class Test{
  function Test():void{
    var e:Example = new Example();
    var a:AnotherClass = new AnotherClass();
    a.callOtherClassFunction({obj:e, type:"setter", func:"something"});
    a.callOtherClassFunction({obj:e, type:"method", func:e.doSomething});
  }
}
你可以试试这个:

class Example{
  function set something(value:String):void{
    trace("set something");
  }

  function doSomething():void{
    trace("something");
  }
}

class AnotherClass{
  function callOtherClassFunction(funcObj:Obj):void{
    if (funcObj.type == "method") {
      funcObj.func.apply();
    }
    else if (funcObj.type == "setter") {
      funcObj.obj[funcObj.func] = "something";
    }
    else if (funcObj.type == "getter") {
      trace(funcObj.obj[funcObj.func]);
    }
  }
}

class Test{
  function Test():void{
    var e:Example = new Example();
    var a:AnotherClass = new AnotherClass();
    a.callOtherClassFunction({obj:e, type:"setter", func:"something"});
    a.callOtherClassFunction({obj:e, type:"method", func:e.doSomething});
  }
}

这里也问:该死。。。我担心这是不可能的。我也在这里问:该死。。。我担心这是不可能的。是的,我知道,但我想要一个函数的句柄来实现这一点。我需要将它传递给另一个类,以便稍后调用。您知道如何将函数引用传递给addEventListener,以便在事件触发时调用它们吗?就像那样。是的,我知道,但是我想要一个函数的句柄来实现这个功能。我需要将它传递给另一个类,以便稍后调用。您知道如何将函数引用传递给addEventListener,以便在事件触发时调用它们吗?像那样。