在AS3中,为什么我们将import语句放在package语句中,而不是在Class声明中?
这是一个典型的(但毫无意义的)AS3类:
package my.foo.package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.utils.Timer;
public class FooClass extends MovieClip
{
public static const EVENT_TIME_UP:String = 'timeUpEvent';
public function FooClass()
{
var timer:Timer = new Timer(2000, 1);
timer.addEventListener(TimerEvent.TIMER, timerHandler);
timer.start();
}
private function timerHandler(e:TimerEvent):void
{
dispatchEvent(new Event(FooClass.EVENT_TIME_UP));
}
}
}
但是为什么所有的导入语句都意味着在课堂上一直到那里?当我将导入移动到如下面的类声明中时,该类可以正常工作。
package my.foo.package
{
import flash.display.MovieClip;
public class FooClass extends MovieClip
{
import flash.events.Event;
import flash.events.TimerEvent;
import flash.utils.Timer;
public static const EVENT_TIME_UP:String = 'timeUpEvent';
public function FooClass()
{
var timer:Timer = new Timer(2000, 1);
timer.addEventListener(TimerEvent.TIMER, timerHandler);
timer.start();
}
private function timerHandler(e:TimerEvent):void
{
dispatchEvent(new Event(FooClass.EVENT_TIME_UP));
}
}
}
只有要在包中的MovieClip导入,因为我的类正在扩展它。
Adobe AS3 coding conventions中没有任何帮助。
那么为什么我们将导入放在包中而不是实际使用它们的类中。该包是不是使用了导入的类呢?如果我将导入移动到类中,为什么它仍然有效?
答案 0 :(得分:1)
这只是一个正在使用的约定,因此有一个中心位置可以查看所有导入。假设我们将你的逻辑带到下一个极端,并在我们声明的每个变量之前在行上放置一个import语句(顺便编译就好了)。无论是故意还是偶然,我们都会不必要地复制进口报表。此外,想要查看给定文件具有哪些依赖关系的人必须扫描整个文件而不是仅查看文件的顶部。你将输入放在类声明中的意义并不是那么疯狂,但是如果你的文件声明了多个类(如内部使用的类的情况,你仍然会遇到分散在整个文件中的导入问题)例如)。