《As3 Expert》_1 :数组操作符的用途,如何访问不可访问的东东?

2024-01-05 19:18

本文主要是介绍《As3 Expert》_1 :数组操作符的用途,如何访问不可访问的东东?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

OOOOOXXXXXXXXX

原帖子地址:http://bbs.9ria.com/thread-53665-1-1.html

As3是强类型语言,如果访问当前上下文环境中不可访问的变量、属性或方法,编译器会报错,虽然被访问的对象实是际存在的。那么如何跳过这种检查呢?

一、数组访问操作符的三个功能

首先,大家都同意[]是一个操作符,Adobe给它起的名字叫做Array Access Operator,译为中文为数组访问操作符,顾名思义它具有以指定下标数字访问数组元素的能力,如arr1[0]、arr1[1],这与在其它高级编程语言中看到的一样。但实际上它的功能绝不仅仅在此,单从字面或者依据其它语言的经验理解会使我们在无意中小看了它。
除了可以访问数组元素,它还可以由编译器代译为new Array(),这使实例化数组的代码更为简洁方便,例如:

  1. var arr :Array = ["as3","expert","programming","by","sban"];
  2. 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,代码如下:

  1. var lc :LoaderContext = new LoaderContext();
  2. lc.allowLoadBytesCodeExecution = true;
复制代码


这两行代码是编译不过去的!原因在于allowLoadBytesCodeExecution是AIR Only属性,如果不是AIR项目,它在FB代码视图下根本就是不可见的。怎么解决?使用数组访问操作符:

  1. var lc :LoaderContext = new LoaderContext();
  2. 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 :数组操作符的用途,如何访问不可访问的东东?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/573890

相关文章

Java访问修饰符public、private、protected及默认访问权限详解

《Java访问修饰符public、private、protected及默认访问权限详解》:本文主要介绍Java访问修饰符public、private、protected及默认访问权限的相关资料,每... 目录前言1. public 访问修饰符特点:示例:适用场景:2. private 访问修饰符特点:示例:

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

使用Python实现批量访问URL并解析XML响应功能

《使用Python实现批量访问URL并解析XML响应功能》在现代Web开发和数据抓取中,批量访问URL并解析响应内容是一个常见的需求,本文将详细介绍如何使用Python实现批量访问URL并解析XML响... 目录引言1. 背景与需求2. 工具方法实现2.1 单URL访问与解析代码实现代码说明2.2 示例调用

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

SpringBoot实现基于URL和IP的访问频率限制

《SpringBoot实现基于URL和IP的访问频率限制》在现代Web应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段,为了保护系统资源,需要对接口的访问频率进行限制,下面我们就来看看如何使用... 目录1. 引言2. 项目依赖3. 配置 Redis4. 创建拦截器5. 注册拦截器6. 创建控制器8.

SpringBoot如何访问jsp页面

《SpringBoot如何访问jsp页面》本文介绍了如何在SpringBoot项目中进行Web开发,包括创建项目、配置文件、添加依赖、控制层修改、测试效果以及在IDEA中进行配置的详细步骤... 目录SpringBoot如何访问JSP页python面简介实现步骤1. 首先创建的项目一定要是web项目2. 在

Linux限制ip访问的解决方案

《Linux限制ip访问的解决方案》为了修复安全扫描中发现的漏洞,我们需要对某些服务设置访问限制,具体来说,就是要确保只有指定的内部IP地址能够访问这些服务,所以本文给大家介绍了Linux限制ip访问... 目录背景:解决方案:使用Firewalld防火墙规则验证方法深度了解防火墙逻辑应用场景与扩展背景:

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE