我想在Flex中启用所有编译器警告,以便在我的代码中解决它们。但有一个警告,我无法弄清楚如何解决它。以下是一些示例代码:
package lib
{
import flash.events.NetStatusEvent;
import flash.net.NetConnection;
public class player
{
private function tmp(event:NetStatusEvent):void
{
}
public function player():void
{
super();
var connection:NetConnection = new NetConnection();
connection.addEventListener(NetStatusEvent.NET_STATUS, tmp);
}
}
}
在使用-warn-scoping-change-in-comp进行编译时,我收到以下警告:
/var/www/test/src/lib/player.as(16): col: 59 Warning: Migration issue: Method tmp will behave differently in ActionScript 3.0 due to the change in scoping for the this keyword. See the entry for warning 1083 for additional information.
connection.addEventListener(NetStatusEvent.NET_STATUS, tmp);
将tmp作为函数放在player()中会起作用,但这不是我想要的。我甚至试图使用this.tmp作为回调,但没有区别。有人知道如何解决这个编译器警告吗?
答案 0 :(得分:1)
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/compilerWarnings.html
这是代码迁移警告。当对象的方法用作值时,通常将其作为回调函数生成此警告。在ActionScript 2.0中,函数在调用它们的上下文中执行。在ActionScript 3.0中,函数始终在定义它们的上下文中执行。因此,变量和方法名称被解析为回调所属的类,而不是相对于调用它的上下文,如下例所示:
class a
{
var x;
function a() { x = 1; }
function b() { trace(x); }
}
var A:a = new a();
var f:Function = a.b; // warning triggered here
var x = 22;
f(); // prints 1 in ActionScript 3.0, 22 in ActionScript 2.0
答案 1 :(得分:0)
该警告仅用于告知您代码的行为可能已更改,以防您将代码从AS2迁移到AS3(编译器事先无法知道)。在将代码从AS2迁移到AS3 时,仅启用编译器选项-warn-scoping-change-in-this
。
所以,正如我在评论中所说的那样,你不应该担心这个警告,因为显然你的代码不是你的代码而且你不需要启用编译器选项。