`

Flex Class object(类对象)构成、traits和prototype

 
阅读更多

先贴张图:


每个矩形代表一个对象。CA代表class A本身,它持有三个引用:TA是实例特征对象(traits object),存储了实例的属性,这些属性是由该类定义的。TCA是类特征对象(class traits object),代表了类的内部类型并了该类定义的存储静态属性。PA是原型对象(prototype object),它总是关联着由构造函数(constructor)属性最初添加的类对象。

 

实际上,prototype算是个历史遗留问题。在as1.0中,prototype是用来实现class定义和继承的:

 

// base class
function Shape() {}
// Create a property named visible.
Shape.prototype.visible = true;// Make Circle a subclass of Shape.

 

// Make Circle a subclass of Shape.
Circle.prototype = new Shape();

 

这样,Circle就相当于继承了Shape。

 

到了AS2.0,已经添加了一些新的关键字,classextendspublicprivate等,但prototype的作用还是一样的,extends关键字只不过简化了创建子类的过程。

直到AS3.0的诞生,添加了traits object。创建子类时,继承的属性直接从父类中复制到了子类的traits object中,因此带来了更高的效率和时间的节省。因为在之前的AS版本中,Flash Player要通过整个prototype链来查找名称。

 

因此,在现阶段的AS3.0中,prototype已经几乎失去了使用的价值。

 

 

AS3中的这两个并列的继承体系,产生了一个兼容性问题:

ECMAScript, Edition 4 draft language specification 要求使用prototype inheritance(原型继承),这意味着核心类的属性和方法是定义在其原型中的。

另一方面,Flash Player API要求使用fixed property inheritance,这意味着核心类的属性和方法是使用const、var、function关键字定义在类定义中。

另外,使用固定属性会比使用原型版本带来极大的运行时性能提升。

 

于是,AS3.0的核心类同时使用了两套集成体系,即每个核心类都包含了两套属性和方法,但可以用AS3这个命名空间来区分。类似:

 

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

 

AS3为这两种体系提供了编译参数:

 -as3 和 -es,分别代表AS3和ECMAScript。

Adobe Flex Builder and Adobe Flash CS3 Professional的默认编译设置是 -as3 = true 和 -es = false.

 

 

参考:

http://livedocs.adobe.com/flex/3/html/help.html?content=04_OO_Programming_12.html#136347

分享到:
评论

相关推荐

    c++_traits.pdf

    以上代码定义了一个`is_interesting`Traits类,它可以检测特定类型是否“有趣”(在此处指`int`和`float`)。 ```cpp template, bool interesting> struct function_selector { static void function_impl...

    Laravel开发-laravel-model-traits

    在Laravel框架中,Model Traits是一种强大的代码复用机制,它们允许你在多个模型类之间共享特定的行为或属性。本项目“Laravel开发-laravel-model-traits”聚焦于为Laravel 5模型提供一系列预定义的Traits,以简化...

    PHP面向对象类的实例-计算器

    然而,面向对象编程不仅仅是编写独立的类和方法,还包括如何设计类的结构,以及如何利用接口、抽象类等提高代码的灵活性和可扩展性。 例如,我们可以考虑为`Calculator`类添加一个`calculate()`方法,使其能处理更...

    traits与迭代器.doc

    traits 技术是 C++ 编程语言中的一种泛型编程技术,允许开发者定义一个通用函数或类模板,可以对不同的数据类型进行操作。traits 技术的主要优点是可以提高代码的可重用性和灵活性。 在给定的实验报告中,我们可以...

    PHP5面向对象开发教程第三章-PHP5面向对象高级类特性

    在PHP5中,面向对象编程(Object-Oriented Programming,OOP)的引入极大地提升了代码的组织结构和可维护性。本教程将聚焦于PHP5的面向对象高级类特性,帮助开发者深入理解并掌握这些特性,以提升PHP编程的专业水平...

    深入php面向对象模式与实践共19页.pdf.zip

    【描述】中提到的“深入php面向对象模式与实践共19页.pdf.zip”暗示了这份材料将深入探讨PHP的OOP特性,包括但不限于类(Class)、对象(Object)、封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism...

    C++ STL Template Traits使用代码

    设计一个Measurement计量单位类型,满足如下要求, 1.当为距离单位,当构造米或者千米等不同距离单位的实例时,统一以...3.如果为除距离和时间的其他单位,都打印值即可。 注意:代码实现中运用了模板中的traits技术。

    Laravel开发-eloquent-traits

    Eloquent ORM的一个重要特性是使用Traits来扩展和定制模型的功能。Traits在PHP中是一种代码复用机制,允许我们在多个类之间共享方法。在"Laravel开发-eloquent-traits"的主题中,我们将深入探讨如何利用Traits来增强...

    Scala面向对象.docx

    本篇将详细阐述Scala中的面向对象特性,包括类、对象、继承和特质。 1. **类与对象** Scala的类设计简洁而强大。与Java和C++不同,Scala的类默认就是公开的,无需声明为public。源文件中可以包含多个类,它们都...

    高速对象池(内存池)类模板代码(C++)

    包含定义代码和测试代码,代码不复杂,有注释,池对象存取时间复杂度为常数级,多线程测试速度可达千万次/秒。 使用方法如下: 1.定义池,例如: FastPool<std::string> pool; 2.往池添加对象,例如: pool.Add(...

    Python库 | link_traits-1.0.3.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:link_traits-1.0.3.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    callable_traits, callable类型的现代 C 型特征和泛函.zip

    callable_traits, callable类型的现代 C 型特征和泛函 Boost.CallableTraits CallableTraits是一个C 11头库,用于检查。合成和分解可以调用类型。这里有最新的文档,这里是 。在CallableTraits中,被正式地检查过,...

    traits-4.6.0-cp34-cp34m-win32

    traits-4.6.0-cp34-cp34m-win32

    在 PHP 和 Laravel 中使用 Traits的方法

    这意味着一个类只能从另一个类中继承。例如,可能希望从几个不同的类继承方法,以防止代码重复。在 PHP 5.4 中 一个新的语言特性被... Trait 的语义组合与类的定义在某种程度上减少了代码的复杂度,避免了与多继承和 Mi

    traits-6.1.0-cp36-cp36m-win_amd64.rar

    包含内容:traits-6.1.0-cp36-cp36m-win_amd64.whl 安装tvtk需要 VTK-7.1.1-cp36-cp36m-win_amd64.whl numpy-1.12.1+mkl-cp36-cp36m-win_amd64.whl traits-4.6.0-cp36-cp36m-win_amd64.whl mayavi-4.5.0+vtk71-cp36...

    traits-6.2.0-cp310-cp310-win32

    traits-6.2.0-cp310-cp310-win32

    traits-4.6.0-cp36-cp36m-win-amd64.whl

    总的来说,`traits`库在Python科学计算和可视化中扮演着基础角色,通过提供动态属性管理和验证,简化了复杂对象的创建。在3D可视化应用中,`traits`库与`TVTK`结合,使用户能以Python的简洁和强大,处理和展示复杂的...

    basic-string.h

    template <class CharT, class Traits = std::char_traits<CharT>> using basic_string = std::basic_string, Traits, std::polymorphic_allocator<CharT>> } (2) (C++17 起) 类模板 basic_string 存储并操纵作为...

Global site tag (gtag.js) - Google Analytics