《As3 Expert》_1 :数组操作符的用途,如何访问不可访问的东东?
来源:互联网 发布:淘宝达人如何发布清单 编辑:程序博客网 时间:2024/04/27 16:23
OOOOOXXXXXXXXX
原帖子地址:http://bbs.9ria.com/thread-53665-1-1.html
As3是强类型语言,如果访问当前上下文环境中不可访问的变量、属性或方法,编译器会报错,虽然被访问的对象实是际存在的。那么如何跳过这种检查呢?
一、数组访问操作符的三个功能
首先,大家都同意[]是一个操作符,Adobe给它起的名字叫做Array Access Operator,译为中文为数组访问操作符,顾名思义它具有以指定下标数字访问数组元素的能力,如arr1[0]、arr1[1],这与在其它高级编程语言中看到的一样。但实际上它的功能绝不仅仅在此,单从字面或者依据其它语言的经验理解会使我们在无意中小看了它。
除了可以访问数组元素,它还可以由编译器代译为new Array(),这使实例化数组的代码更为简洁方便,例如:
- var arr :Array = ["as3","expert","programming","by","sban"];
- var arr :Array = new Array(“as3″,”expert”,”programming”,”by”,”sban”); //
除非不了解[],不然我不相信有人会如此行码
使用[]实例化数组已经成为圈内公共的AS3最佳实践之一。下面书归正传,让我们看看数组访问操作符的第三个功能,如何访问不可访问的变量、属性或方法?
二、案例
假设我们有三个项目A、B和C,其中A为As3 Library项目,B为Flex Web项目,C为Flex AIR项目,B与C均引用了项目A。在项目A某处,我们在加载资源时使用了LoaderContext对象,这个对象有一个可读写属性叫做allowLoadBytesCodeExecution,由于某种原因我必须把这个属性设置为true,代码如下:
- var lc :LoaderContext = new LoaderContext();
- lc.allowLoadBytesCodeExecution = true;
这两行代码是编译不过去的!原因在于allowLoadBytesCodeExecution是AIR Only属性,如果不是AIR项目,它在FB代码视图下根本就是不可见的。怎么解决?使用数组访问操作符:
- var lc :LoaderContext = new LoaderContext();
- lc['allowLoadBytesCodeExecution'] = true;
由此可见,allowLoadBytesCodeExecution属性在源码中并不是不存在,仅是FB与编译器在非AIR项目中屏蔽了它,限制你去使用。我们不妨推测,Adobe使用了同一套代码维护了两个播放器,它们并不是完全分开的。
类似的情况在Flex SDK中还有许多。
三、总结
数组访问操作符[]的三个用途:
1,返回指定下标的数组元素(地球人都知道了)
2,简写代码,代替new Array实例化数组,返回引用
3,避开编译器检查,访问不可访问的变量、属性或方法
四、最佳实践
1,使用操作符[]实例化数组
2,除非没有别的办法了,不用乐于使用数组访问操作符访问隐藏的变量、属性或方法, 它使你的代码不可追踪难以阅读,同时避开的编译器强类型检查可能会使你的项目具有某个不可预知的隐患。对于数组访问操作符的第三个用途,你应当审慎的对待。
五、思考与练习
1,设有对象fruit1具有属性tradePrice,sellPrice,count等整形可读写属性,如何在不确定属性名称的情况下改变其属性值?
2,如何使用操作[]调用不可调用的内部方法?
sban 2008/4/1 北京。本文属于《AS3 Expert》的一部分,转载请注明作者及出处,非商用。
- 《As3 Expert》_1 :数组操作符的用途,如何访问不可访问的东东?
- AS3嵌入swf元件库,如何访问指定的资源
- php中数组的访问操作
- as3 Array(数组)的操作
- 如何访问Android里面的数组元素
- 《AS3 Expert》_3:为什么for不能有序遍历数组的所有元素?
- 简单的数组访问
- 局域网访问XP出现不可访问的几个问题
- Oracle不可访问问题的解决
- 【转】as3中手工创建的MC如何访问父级变量及函数
- 13_1理解基类中成员的访问限定符和派生类的继承方式
- AS3如何访问父级元素
- C语言数组和指针是如何访问的
- c++中如何访问数组的-1位置
- 链表 4:(双链表的一个用途)访问频度调整
- AS3语言基础学习笔记之继承的访问控制
- 数组元素的访问方法
- mat数组元素的访问
- 距离变换(cvDistTransform)
- 软件用例设计中的结构设计
- 二叉查找树的遍历总结
- c/c++输入输出总结
- Hive join操作小结
- 《As3 Expert》_1 :数组操作符的用途,如何访问不可访问的东东?
- HDFS Datanode与Client之间的数据传输
- Python中实现连接mysql数据库
- 心得10--request介绍和案例分析、请求重定向和请求转发的区别
- Access restriction: The type FileURLConnection is not accessible due to restriction
- request
- 心得11--案例分析request.getparameter()方法的用法及请求乱码处理、分配器方法
- PoolManger模式(二)
- 内存泄露