加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

AS3 命名空间

发布时间:2020-12-15 18:30:08 所属栏目:百科 来源:网络整理
导读:http://help.adobe.com/zh_CN/as3/learn/WSf00ab63af761f170-4ed0731912937da73f7-7fe5.html#WSf00ab63af761f170-4ed0731912937da73f7-7fe0 AS3 命名空间 由于存在两种继承机制,即固定属性继承和原型继承,所以涉及到核心类的属性和方法时,就存在两种机制

http://help.adobe.com/zh_CN/as3/learn/WSf00ab63af761f170-4ed0731912937da73f7-7fe5.html#WSf00ab63af761f170-4ed0731912937da73f7-7fe0

AS3 命名空间

由于存在两种继承机制,即固定属性继承和原型继承,所以涉及到核心类的属性和方法时,就存在两种机制的兼容性问题。如果与 ActionScript 所基于的 ECMAScript 语言规范兼容,则要求使用原型继承,这意味着核心类的属性和方法是在该类的原型对象上定义的。另一方面,如果与 ActionScript 3.0 兼容,则要求使用固定属性继承,这意味着核心类的属性和方法是使用?constvar?和?function?关键字在类定义中定义的。此外,如果使用固定属性而不是原型属性,将显著提升运行时性能。

在 ActionScript 3.0 中,通过同时将原型继承和固定属性继承用于核心类,解决了这个问题。每一个核心类都包含两组属性和方法。一组是在原型对象上定义的,用于与 ECMAScript 规范兼容,另一组使用固定属性定义和 AS3 命名空间定义,以便与 ActionScript 3.0 兼容。

AS3 命名空间提供了一种约定机制,用来在两组属性和方法之间做出选择。如果不使用 AS3 命名空间,核心类的实例会继承在核心类的原型对象上定义的属性和方法。如果决定使用 AS3 命名空间,核心类的实例会继承 AS3 版本,因为固定属性的优先级始终高于原型属性。换句话说,只要固定属性可用,则始终使用固定属性,而不使用同名的原型属性。

通过用 AS3 命名空间限定属性或方法,可以选择使用 AS3 命名空间版本的属性或方法。例如,下面的代码使用 AS3 版本的?Array.pop()?方法:

var nums:Array = new Array(1,2,3); 
nums.AS3::pop(); 
trace(nums); // output: 1,2

或者,也可以使用?use namespace?指令打开代码块中所有定义的 AS3 命名空间。例如,以下代码使用?use namespace?指令为?pop()?和?push()?方法打开 AS3 命名空间:

use namespace AS3; 
 
var nums:Array = new Array(1,3); 
nums.pop(); 
nums.push(5); 
trace(nums) // output: 1,5

ActionScript 3.0 还为每组属性提供了编译器选项,以便将 AS3 命名空间应用于整个程序。-as3?编译器选项表示 AS3 命名空间,-es?编译器选项表示原型继承选项(es?代表 ECMAScript)。要打开整个程序的 AS3 命名空间,请将?-as3?编译器选项设置为?true,将?-es?编译器选项设置为?false。要使用原型版本,请将编译器选项设置为相反值。Flash Builder 和 Flash Professional 的默认编译器设置是?-as3 = true-es = false

如果计划扩展任何核心类并覆盖任何方法,应了解 AS3 命名空间对声明覆盖方法的方式有什么影响。如果要使用 AS3 命名空间,覆盖核心类方法的任何方法都必须使用 AS3 命名空间以及?override?属性。如果不打算使用 AS3 命名空间且要重新定义子类中的核心类方法,则不应使用 AS3 命名空间或?override?关键字。

人和人不要比。自己做自己。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读