AS3:使用-warn-scoping-change-in-this确定范围问题

时间:2013-02-22 09:58:28

标签: actionscript-3 flex

我想在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作为回调,但没有区别。有人知道如何解决这个编译器警告吗?

2 个答案:

答案 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

所以,正如我在评论中所说的那样,你不应该担心这个警告,因为显然你的代码不是你的代码而且你不需要启用编译器选项。