关于actionscript3中的if (stage != null) init();

一直不知道为什么要这么写。

今天才知道,通常一个document class是第一个被放入stage,这就意味着在document class的构造函数中,已经可以访问stage对象,

而如果这个swf文件被另一个swf文件包装(wrap)时,那么这个swf文件被实例化的时候并没有在显示列表中,所以不能访问stage对象。

所以加上 if (stage != null) init();这个限制条件,而addEventListener(Event.ADDED_TO_STAGE, init);

是在ADDED_TO_STAGE这个事件发生后再初始化这个对象,那么就不存在要访问stage对象时而stage对象不存在的问题了。

其实这其中最根本的原因是stage对象只能被在显示列表中的对象所访问。

var mc:MovieClip = new MovieClip();//mc.stage == null
stage.addChild(mc);//mc.stage != null
原文地址:https://www.cnblogs.com/alexlee85/p/1925316.html