是不是可以从静态方法获取arguments数组?

时间:2015-12-31 23:57:03

标签: actionscript-3 flash

我正在尝试从静态方法中获取保留关键字arguments数组,我收到此错误:

  

1042:this关键字不能用于静态方法。它只能   用于实例方法,函数闭包和全局代码。

这是我的代码:

public static function doSomething(message:String, ...Arguments):void {
    var object:Object = this.arguments.caller;
}

如果我取出this关键字,则会收到以下错误:

  

1120:访问未定义的属性参数。

3 个答案:

答案 0 :(得分:1)

this保留用于引用类的当前实例,遗憾的是,静态函数中不存在该类(因为静态函数未绑定到实例)。

如果您想传入未知数量的参数,可以尝试使用新的rest关键字:

  

ActionScript 3.0包含一个新的...(rest)关键字,建议使用它而不是参数类。

但是,如果您只是想获得调用者函数:

  

与以前版本的ActionScript不同,ActionScript 3.0没有arguments.caller属性。要获取对调用当前函数的函数的引用,必须将对该函数的引用作为参数传递。可以在arguments.callee的示例中找到此技术的示例。

public function test() {
    doSomething("Hello", arguments.callee);
}

public static function doSomething(message:String, caller:Function):void {
    var object:Object = caller;
}

答案 1 :(得分:1)

您可以获得静态方法的arguments。来自文档:

  

在函数体内,可以使用局部参数变量访问其参数对象。

您不需要this关键字thisClass实例的引用,而不是function本身:

public static function doSomething():void {
    return arguments;
}

接下来,您可以访问调用静态方法的arguments

var arguments:Object = MyClass.doSomething();
trace( arguments.callee );

但请记住,就像@MartinKonecny所说,在AS3中最好使用...rest关键字或传递function引用作为参数。

答案 2 :(得分:0)

arguments对象在静态函数中可用,但在使用...rest参数时不可用。

  

使用此参数会使参数对象不可用。虽然   ...(rest)参数为您提供与...相同的功能   arguments数组和arguments.length属性,它不提供   功能类似于arguments.callee提供的功能。确保   你在使用之前不需要使用arguments.callee ...(其余的)   参数。

取出...rest参数,出现arguments对象。

此外,并非始终需要this关键字。

method.apply(this, args);

可能会在静态函数中抛出错误,但参数是可选的,所以这也有效:

method.apply(null, args);

有关rest关键字的详情。