Essential Actionscript 2.0流水账
作者 佚名技术
来源 服务器技术
浏览
发布时间 2012-07-12
看到有朋友翻译这个书,全方位支持!!! JimLee 曾翻过一部分,大家可搜索关键词:EAS2流水账 更更希望有朋友能整理成册,方便大家使用 作者:作者:JimLee as2.0中的数据类型检查 晚上抽出了一点时间,开始读《Essential ActionScript2.0》,Day Day Up,呵呵,还真的要谢谢DDU,不然,猴年马月我才能读到EAS2。 前面两章(综述,对象导向的ActionScript)很一般,第三章数据类型和类型检查(Datatypes and Type checking)有些地方有点意思,记下来了: 1、会七十二变的Object 将变量、属性、函数返值、函数参数定义为Object类型,它可以被赋值为任何类型的数据,编译器不会提示错误,因为Object是所有AS类的基类(好像Delphi中的object对象喔,呵呵)例如: var container:Object = new Date( ); // No error. container = new Color( ); // No error. moock提醒读者,不要过度使用该技术,从而使编译器在我们不小心调用变量、属性、函数返值、函数参数等时,无法及时发现代码中存在的错误: var container:Object = new Date( ); // No error. trace(container.toString( )); // 正常的执行toString方法 container.blahblahblah( ); // 调用不存在的方法,无错误 trace(container.foobarbaz); // 访问不存在的属性,无错误 事实上,Date类是没有blahblahblah()方法和foobarbaz属性,但是因为container是Object类型的实例,编译器将无法发现代码中发现的错误。 在后面,moock还提到了一个关于Object的技巧,让函数接受多种类型的参数,巧妙地实现了其他语言中的重载。 下面是moock写的实例代码: function output (msg:Object):Void { // 使用类型检查,从而实现不同的操作 if (typeof msg == "string") { trace(msg); } if (msg instanceof XML) { var doc:XML = XML(msg); trace(doc.firstChild.firstChild.nodeValue); } } 2、水一样的null和undefined Rest easy—unlike other values, the null and undefined types can be used anywhere, regardless of the type of container they are stored in:(原文,呵呵) var target:MovieClip = null; // 合法 function square (x:Number):Number { return x*x; } square(null); // 合法,呵呵,可是square(null)将返回什么呢? function square (x:Number):Number { if (x == 0) { return null; // 合法,靠,这都可以,前面定义的函数返值可是Number类也! } return x*x; } moock打了一个比方,Object就像人类中的AB血型,可以接受任何类型;而null和undefined就像O型血,可以被任何数据类型接受,呵呵,满恰当的。 书中还举了一个使用null/undefined的场合:用来作为函数的占位符: //你可以比较一下使用null和不使用null有什么不同 var tf:TextFormat = new TextFormat(null, null, null, true); 3、动态类 AS2内嵌了ArrayArray、ContextMenu、ContextMenuItem、Function、FunctionArguments (也叫Arguments object)、LoadVars、MovieCl、Object、TextField等动态类,可以随时为这些类的实例增加类中没有定义的属性和方法,灵活倒是灵活,可惜要谨慎使用为妙,不然,不小心写错了一个字母,查错都够你头痛的呢,:) 所以说,除非万不得已,还是循规蹈矩的好,人家诸葛亮天纵英才,都“一生唯谨慎而已”。 4、使用[]操作符的技巧 var song:Sound = new Sound( ); song.url = "track3.mp3"; // 错误 注意下面的代码 var song:Sound = new Sound( ); song["url"] = "track3.mp3"; trace(song["url"]); // Displays: track3.mp3 看来,AS2还是不那么严格,使用[]操作符可以为每个实例增加新的属性,而不管它所属的类是否已经定义了该属性,使用“.”语法则没有那么幸运,编译器会进行“严格”的检查,严格吗?难说,呵呵。 //说明:查阅帮助关于[]的说明,看到一段与[]引用有关的文字,抄录在这里帮助理解: 用法 5:您可以用数组访问运算符代替 eval 函数,从而动态地设置并获取影片剪辑名称的值或一个对象的任何属性: name["mc" + i] = "left_corner"; 5、类型检查的一些特例 (1)定义全局变量不需要声明变量类型如下所示: _global.varname = value; _global.author:String = "moock"; // 错误 _global.author="moock";//正确 (2)放在时间轴上某帧上的代码中,如果涉及到某个MovieClip的属性,将不会进行类型检查,例如 _root._y = "test"; // 不会提示错误,事实上类型不匹配 var msg:String = _root.getBytesLoaded( );// 不会提示错误,事实上类型不匹配 为了进行严格的类型检查,正确的方法是首先将MovieClip赋值给一个替代变量,如下例所示: var theRoot:MovieClip = _root; theRoot._y = "test"; // 类型不匹配 var msg:String = theRoot.getBytesLoaded( ); // 类型不匹配 var thisMC:MovieClip = this; var x:String = thisMC; // 类型不匹配 function square(x:Number):Number { return x * x; } square(thisMC); // 类型不匹配 :),可是,你喜欢这种规范的写法吗? 关键词: |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: 情人节新武器附加原文件教程篇下一篇: 【挖掘samples】层次切换新教程
关于Essential Actionscript 2.0流水账的所有评论