【学习笔记】一个关于在时间轴上编程的问题
【殿堂之路】P98页
这是一个sampleThis.as的类文件,先上源代码:
1 package 2 { 3 import flash.display.Sprite; 4 public class sampleThis extends Sprite 5 { 6 private var foo:String = "foo in Class Definition!"; 7 public function sampleThis() 8 { 9 testThis(); 10 } 11 private function testThis():void 12 { 13 var foo:String = "foo in testThis()!!!!"; 14 trace(foo); 15 trace(this.foo); 16 } 17 } 18 } 19 20 21 /*输出如下: 22 场景 1, 图层'图层 1', 帧 1,2 行1037: 包不能嵌套。 23 */
可以看到输出的结果是:包不能嵌套。
根据自己的分析和上百度搜索答案之后,得到初步的结论:
在时间轴上编程,是不能够加入包的。也就是说,去掉了package,public,private等一些细节的代码之后,就能得到正确的结果。
修改后的代码如下:
1 var foo:String = "foo in Class Definition!"; 2 function sampleThis() 3 { 4 testThis(); 5 } 6 function testThis():void 7 { 8 var foo:String = "foo in testThis()!!!!"; 9 trace(foo); 10 trace(this.foo); 11 } 12 sampleThis(); 13 14 15 /*输出如下: 16 foo in testThis()!!!! 17 foo in Class Definition! 18 */
特别说明一下:
1 trace(foo); //输出的是testThis()的foo,即局部属性 2 trace(this.foo); //输出的是实例属性foo,这是this关键字的用法之一
我的心得:
不知道这种解决方法是不是最佳方式,等深入学习之后再回来看看有没更好的解决方案。
--------------------------------------------------------------------------------
2012/06/21补充说明:
通过学习,发现我的心得里说的话是欠妥的。
其实,以上说的方法只是针对时间轴上编程来说的。真正解决这个问题的办法是要理解“包与类路径”的关系,也就是说,要明白以 .as 为后缀的类文件和以 .fla 为后缀的Flash文件,它们的调用方法的原理。只有这样,才能真正避免上述出现的问题。
最后的解决方案如下:
1 //sampleThis.as这个文件的绝对路径是:D:\myClass\sampleThis.as,也就是说,它被保存在D盘的一个名叫myClass的文件夹里 2 //因此,sampleThis类的包名就是它所在的文件夹的名字--myClass!同理,如果路径是D:\myClass\subMyClass\sampleThis.as 3 //那么,包名就是myClass.subMyClass 4 5 //类文件的写法! 6 //myClass是包名! 7 package myClass 8 { 9 import flash.display.Sprite; 10 public class sampleThis extends Sprite 11 { 12 private var foo:String = "foo in Class Definition!"; 13 public function sampleThis() 14 { 15 testThis(); 16 } 17 private function testThis():void 18 { 19 var foo:String = "foo in testThis()!!!!"; 20 trace(foo); 21 trace(this.foo); 22 } 23 } 24 }
这个时候,把test.fla文件放在和文件夹myClass的同一个目录中,也就是说,fla的绝对路径是D:\test.fla,上一张图吧:
且test文件代码改为:
1 //导入包myClass里的sampleThis文件 2 import myClass.sampleThis; 3 4 //初始化sampleThis类的对象,运行并得到上述的结果 5 var test:sampleThis = new sampleThis();
到此,包和类路径,还有就是在时间轴上的编程的学习,就告一段落咯。哈哈哈。继续努力!