【第二章】《Flash Actionscript3 殿堂之路》读书笔记

       这章的标题是:“ActionScipt3语言基本元素”,虽然不难,但发觉有些地方还是挺有用的,也是平时我一直没有完全弄懂的。看了后,发觉黑羽研究得很深入。接下来总结一下一些重要的东西:
       一、在AS3里面,一切都是从对象(Object)那里继承过来的,所以一切数据都是对象,包括运算符、函数那些;
       二、像:riaHomeCn 这种第一个单词用小写,其余单词的第一个字母用大写的变量命名方法叫做“骆驼命名法”(算我见识少,我现在才知道可以这样称呼);
       三、在AS3里面,变量都是持有引用的,也就是说不像C#语言那样数据类型分为值类型引用类型:值类型直接存储值,而引用类型存储引用,指向要操作的对象。但AS3里的数据类型分为基元数据类型复杂数据类型。其中基元数据类型好比值类型,复杂数据类型好比引用类型,别忘了,AS3里面,这两数据也是对象(Object)来的,只是基元数据类型(值类型)是一种不变对象immutable object)。
基元数据类型(值类型)例子:
       var a:int = 3;
       var b:int = a;
       b = 9;
       trace(“a值是:” + a); //输出:a值是:3
       trace(“b值是:” + b); //输出:b值是:9
书中是这样写的:
       a的值赋给b后,改变了b的值,a的值并没有因为b值的改变而变化。这就是值类型的特点:直接存值。每个变量的值不因为其它变量的值的改变而改变。
 
复杂数据类型(引用类型)例子:
       var a:Array = new Array(1, 2, 3);
       var b:Array = a;
       b[0] = 4;
       trace(“a值是:” + a); //输出:a值是:4, 2, 3
trace(“b值是:” + b); //输出:b值是:4, 2, 3
书中是这样写的:
       同样是把a的值赋给b的值,但b的值改变后,a的值也跟着改变了。很多初学者都不会想到改变b的值会影响到a的值,因此大量的此种类型的程序臭虫(Bug就会出现。
书中对上述现象的详细解说是这样的(略作修改)
       在本例中,第一行代码告诉Flash Player在内存中创建一个数组[1, 2, 3]。然后设置变量a指向这个数组,用正式的话来说就是,把这个数组的引用赋值给变量a。第二行代码中,当我们把a的值赋给b时,其实Flash Player并没有在内存中再创建一个新的数组[1, 2, 3],而是直接把变量a的引用又给了b。因此,b的引用和a的引用完全一样,都是指向原来的数组[1, 2, 3]。所以,当我们通过b变量改变数组值时,就改变了原来的那个唯一的数组。由于ba控制的都是同一个对象,所以,理所当然,a的输出结果也变了。
 
还有一个,在AS3里面,声明常量用const关键字,如:
              const a:int = 100;
如果我们强制改变它的值,编译器会报错的:
              const a:int = 100;
              a = 99;
 
总结一下AS3里面的数据类型:
       基础数据类型包括:基元数据类型和复杂数据类型。
       基元数据类型:BooleanintuintNumberString
       复杂数据类型:ArrayObject
 
最后介绍一下typeofisasindelete
       Typeof是用字符串的形式返回对象的类型。语法:
              trace( typeof 10 ); //输出:number
 
       is 用来判断一个对象是否属于一种类型,返回的是布尔值,true为属于,false为不属于。 as 则返回这个对象和null
              trace( 9 is Number ); //输出:true
              trace( 9 as Number ); //输出:9
              trace( 9 as Array ); //输出:null
 
       in 关键字用来判断一个对象是否作为另一个对象的键(Key)或索引,存在返回true,不存在返回false,如:
              var a:Array = [“a”, ”b”, ”b”];
              trace( 2 in a ); //数组a含有索引2,所以为true
              trace( 3 in a ); //只有3个元素,没有索引为3的元素,所以为false
 
              var b:Object = {name: ”YoungBoy”, age: 20};
              trace( “name” in b ); //true,确实有name为键的属性
              trace( “age” in b ); //同上
             
       delete AS3 中已经不同于AS2了。在AS2中可以使用delete关键字删除对象任意一个的实例属性。但在AS3中,delete关键字的作用已经大大减少了,它只可以用来删除对象的动态实例属性,非动态属性不能删除。
       如果要将一个属性所持有的引用删除,将null赋值给该属性即可:
              var b:Object = {name: “YoungBoy”, age: 20};
              // delete b; //会报错,不能这样删除了
              delete b.name; //成功,因为nameb对象的动态属性
              trace( b.name ); //输出:undefined
 
              b = null;
              trace( b ); //输出:null,那么b变量持有原有对象的引用就删除了

标签集:TAGS:AS3 Flash
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}