- 浏览: 135824 次
- 性别:
- 来自: 北京
文章分类
最新评论
先贴张图:
每个矩形代表一个对象。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,已经添加了一些新的关键字,class, extends, public, private等,但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
发表评论
-
Flex从swf中加载资源和类
2013-12-10 09:37 754需要为直播播放器做几个新的样式,想将每个样式的布局XML和 ... -
swf加载swf的一些问题
2013-03-20 17:31 7111,swfParent 加载 swfChild,如果有交互, ... -
NetStream appendBytes 一点经验
2013-03-20 16:25 2594最近在做基于 NetStream ... -
【译】HTML5还需要什么才能击败Flash(part 2)
2012-04-01 17:53 0What else does HTML5 need to ... -
【译】HTML5还需要什么才能击败Flash(part 1)
2012-04-01 16:36 1080What else does HTML5 need to de ... -
AS 函数作用域、函数闭包、限界方法
2012-03-30 10:21 1465作用域链(scope chain): 任何时候函数开始 ... -
在AS3中自定义全局方法
2012-03-29 11:17 942http://en.flash-ripper.com/2007 ... -
使用flex sdk3.6的asdoc遇到的问题及解决方法
2012-03-26 10:24 1947想要对一个组件项目导出asdoc。组件的sdk是3.6,但使用 ... -
UIComponent添加Image不显示
2012-03-18 17:32 1009在UIComponent中添加Image组件,图片不显示。 ... -
Flex优化技巧
2012-03-30 09:46 893http://www.jb51.net/article/182 ... -
Flex中多个柱状图和折线图的问题
2012-02-28 17:53 1977做了个柱状图和折线图的混合图表,2根3D的柱子,6根折线,遇到 ... -
AdvancedDatagrid的dataprovider属性
2012-02-22 10:15 810高级dataGrid的dataProvider的set方法里并 ... -
Sprite的宽高设置及Flex组件的混淆
2012-02-02 10:23 1686由于Bitmap和InteractiveObject同级,都继 ... -
Flex SDK3.5 PollingChannel.as 存在内存泄露bug的一种解决方法
2011-12-31 15:32 1290bug见前面的一篇文章: http://xltank.ite ... -
TextInput的ErrorString样式
2011-10-25 13:08 898http://blog.minidx.com/2008/05/ ... -
【转】Flash Player的 mm.cfg文件
2011-10-08 17:17 5280http://jpauclair.net/mm-cfg-sec ... -
Flex trace() 保存路径
2011-10-08 17:11 1081http://help.adobe.com/en_US/fle ... -
给ItemRenderer传参
2011-08-18 17:19 1495给ItemRenderer传递初始参数,可以根据参数灵活生成I ... -
AdvancedDatagrid改变行的颜色
2011-08-16 15:25 1611最早我尝试重写AdvancedDatagrid的drawRow ... -
Flex匹配中文的正则
2011-08-08 10:39 963来源 :http://bbs.airia.cn/thread- ...
相关推荐
以上代码定义了一个`is_interesting`Traits类,它可以检测特定类型是否“有趣”(在此处指`int`和`float`)。 ```cpp template, bool interesting> struct function_selector { static void function_impl...
在Laravel框架中,Model Traits是一种强大的代码复用机制,它们允许你在多个模型类之间共享特定的行为或属性。本项目“Laravel开发-laravel-model-traits”聚焦于为Laravel 5模型提供一系列预定义的Traits,以简化...
然而,面向对象编程不仅仅是编写独立的类和方法,还包括如何设计类的结构,以及如何利用接口、抽象类等提高代码的灵活性和可扩展性。 例如,我们可以考虑为`Calculator`类添加一个`calculate()`方法,使其能处理更...
traits 技术是 C++ 编程语言中的一种泛型编程技术,允许开发者定义一个通用函数或类模板,可以对不同的数据类型进行操作。traits 技术的主要优点是可以提高代码的可重用性和灵活性。 在给定的实验报告中,我们可以...
在PHP5中,面向对象编程(Object-Oriented Programming,OOP)的引入极大地提升了代码的组织结构和可维护性。本教程将聚焦于PHP5的面向对象高级类特性,帮助开发者深入理解并掌握这些特性,以提升PHP编程的专业水平...
【描述】中提到的“深入php面向对象模式与实践共19页.pdf.zip”暗示了这份材料将深入探讨PHP的OOP特性,包括但不限于类(Class)、对象(Object)、封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism...
设计一个Measurement计量单位类型,满足如下要求, 1.当为距离单位,当构造米或者千米等不同距离单位的实例时,统一以...3.如果为除距离和时间的其他单位,都打印值即可。 注意:代码实现中运用了模板中的traits技术。
Eloquent ORM的一个重要特性是使用Traits来扩展和定制模型的功能。Traits在PHP中是一种代码复用机制,允许我们在多个类之间共享方法。在"Laravel开发-eloquent-traits"的主题中,我们将深入探讨如何利用Traits来增强...
本篇将详细阐述Scala中的面向对象特性,包括类、对象、继承和特质。 1. **类与对象** Scala的类设计简洁而强大。与Java和C++不同,Scala的类默认就是公开的,无需声明为public。源文件中可以包含多个类,它们都...
包含定义代码和测试代码,代码不复杂,有注释,池对象存取时间复杂度为常数级,多线程测试速度可达千万次/秒。 使用方法如下: 1.定义池,例如: FastPool<std::string> pool; 2.往池添加对象,例如: pool.Add(...
资源分类:Python库 所属语言:Python 资源全名:link_traits-1.0.3.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
callable_traits, callable类型的现代 C 型特征和泛函 Boost.CallableTraits CallableTraits是一个C 11头库,用于检查。合成和分解可以调用类型。这里有最新的文档,这里是 。在CallableTraits中,被正式地检查过,...
traits-4.6.0-cp34-cp34m-win32
这意味着一个类只能从另一个类中继承。例如,可能希望从几个不同的类继承方法,以防止代码重复。在 PHP 5.4 中 一个新的语言特性被... Trait 的语义组合与类的定义在某种程度上减少了代码的复杂度,避免了与多继承和 Mi
包含内容: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`库在Python科学计算和可视化中扮演着基础角色,通过提供动态属性管理和验证,简化了复杂对象的创建。在3D可视化应用中,`traits`库与`TVTK`结合,使用户能以Python的简洁和强大,处理和展示复杂的...
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 存储并操纵作为...