类系统

Get Started. It's Free
or sign up with your email address
Rocket clouds
类系统 by Mind Map: 类系统

1. 定义一个类Ext.define(className, data, createdFn)

1.1. 如果data配置有override 则调用ClassManager的createOverride

1.2. 调用ClassManager的create

1.2.1. 调用ClassManager的instantiate

1.2.1.1. 创建一个方法ctor,方法体调用自身constructor方法,该ctor最终表示用户所定义的一个类

1.2.1.2. 加上配置data.$className = className;

1.2.1.3. 并返回new Class (ctor, data, onCreatedFn)

1.2.1.3.1. Class构造函数

1.2.1.3.2. onCreatedFn干了什么

2. hooks

2.1. preprocessors 回调参数(cls, data) (默认已注册的有序预处理器, 回调参数中的cls表示define返回类, data是配置参数)

2.1.1. 'className' ClassManager中注册, 强执行

2.1.1.1. 赋给cls一个$classname属性

2.1.2. 'loader' Loader中注册, 强执行

2.1.2.1. 查找data配置具有依赖别的类的配置项['extend', 'mixins', 'require'], 把所以依赖的类的类名收集到一个数组

2.1.2.2. 检测依赖是否导致死锁

2.1.2.3. 如果没有依赖则返回,继续执行后续预处理器,如果有依赖,则异步加载,把配置项中依赖的类的字符串名称替换为真的对象,然后继续执行后续预处理器

2.1.3. 'extend' Ext.Class中注册, 强执行

2.1.3.1. 确定一个parent = 配置的继承类 || Base

2.1.3.2. 如果parent不是一个Ext定义的类,则拷贝Base的原型属性到parent原型,只拷贝parent原型没有而Base原型有的属性

2.1.3.3. 调用定义的类的extend(Parent)方法,该方法来自Base

2.1.3.3.1. 切断复制一份父类原型

2.1.3.3.2. 指定superclass为父类原型

2.1.3.3.3. 如果parent不是Ext定义的,则用父类原型覆盖同名的parent属性值

2.1.3.3.4. 添加父类的可继承的静态方法

2.1.3.3.5. 拷贝父类的$onExtended钩子到表面,父类的onExtended钩子 (在子类extend父类是调用)

2.1.3.3.6. 切断拷贝一份配置对象

2.1.3.3.7. 切断拷贝配置信息相关的数据列表和对象

2.1.3.4. 执行定义的类的triggerExtend方法,遍历执行$onExtended列表中的方法

2.1.3.5. 将配置中的onClassExtended配置添加到$onExtended中,定义类的子类extend时会调用它

2.1.4. 'statics' Ext.Class中注册

2.1.4.1. 调用定义类的addStatics(data.statics) 该方法来自Base

2.1.4.1.1. Untitled

2.1.5. 'inheritableStatics' Ext.Class中注册

2.1.5.1. 调用定义类的addInheritableStatics(data.inheritableStatics) 该方法来自Base

2.1.5.1.1. 拷贝静态方法

2.1.6. 'config' Ext.Class中注册

2.1.6.1. 遍历配置

2.1.6.1.1. 调用ExtClass的getConfigNameMap获得某个config的属性相应的方法名,包括getter、setter、applier、updater等

2.1.6.1.2. 生成getter、setter (setter调用时会先依次调用applier和updater)

2.1.7. 'mixins' Ext.Class中注册

2.1.8. 'alias' Ext.Class中注册

2.2. OnBeforeCreate (Ext.Class.OnBeforeCreate)

2.3. OnCreated 用户定义类时传入