AS3 命名空间
http://help.adobe.com/zh_CN/as3/learn/WSf00ab63af761f170-4ed0731912937da73f7-7fe5.html#WSf00ab63af761f170-4ed0731912937da73f7-7fe0AS3 命名空间由于存在两种继承机制,即固定属性继承和原型继承,所以涉及到核心类的属性和方法时,就存在两种机制的兼容性问题。如果与 ActionScript 所基于的 ECMAScript 语言规范兼容,则要求使用原型继承,这意味着核心类的属性和方法是在该类的原型对象上定义的。另一方面,如果与 ActionScript 3.0 兼容,则要求使用固定属性继承,这意味着核心类的属性和方法是使用?const、var?和?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?关键字。
人和人不要比。自己做自己。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |