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,以便在事件触发时调用它们吗?像那样。