我正在尝试从静态方法中获取保留关键字arguments
数组,我收到此错误:
1042:this关键字不能用于静态方法。它只能 用于实例方法,函数闭包和全局代码。
这是我的代码:
public static function doSomething(message:String, ...Arguments):void {
var object:Object = this.arguments.caller;
}
如果我取出this
关键字,则会收到以下错误:
1120:访问未定义的属性参数。
答案 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
关键字this
对Class
实例的引用,而不是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关键字的详情。