// 内联函数,不懂?就是将这个方法编译后放入内存中 vario = function(o){ for(varm in o){ this[m] = o[m]; returnfunction(sb, sp, overrides){ if(typeofsp == 'object'){//如果子类还不存在,只有父类和一些属性,那么就调用这2个参数,来构造一个子类,这里面的第三步非常神奇,很难解释的清楚,大致意思就是构造出这么匿名类,并将父类的构造方法借给它用用,嘿嘿,这么解释还不明白就留言吧 overrides = sp; sp = sb; sb = function(){sp.apply(this, arguments);}; varF = function(){}, sbp, spp = sp.prototype;//sb代表子类,sbp代表子类prototype,sp代表父类,spp代表父类prototype F.prototype = spp; sbp = sb.prototype = newF();//其实就是child.prototype = father.prototype,new F()看不懂看第二节 sbp.constructor=sb;//这2步一会儿细说 sb.superclass=spp; if(spp.constructor == Object.prototype.constructor){//这个分支也不可以不管 spp.constructor=sp; sb.override = function(o){//给子类赋予一个override方法 Ext.override(sb, o); sbp.override = io;//给子类的对象赋予override方法 Ext.override(sb, overrides);//将overrides里面的东西,全部赋予子类的prototype里面,不懂看第二节 returnsb;//将这个全新包装的子类返回
我们来详细说说 sbp.constructor=sb 这个东东,为什么要写这么一步呢?因为child.prototype = father.prototype这步执行好后,会把child的constructor给抹掉,所以要把它重新指回来,那么为什么一定要配上这个constructor呢?网上有很多解释,但大都是一抄例子了事,搞了半天还是不明白有什么用处,其实constructor只是类的一个引用,当我们把一个对象调用来调用去,我们都忘记这个对象是由谁创建的时候,它就派上用场了,obj.constructor返回的就是创建obj的那个类了,明白了吧?其次,constructor还有一个方法就是反向调用,比如这样写obj.constructor.call(this),意思是用obj去调用obj的构造方法。恩恩……非常难理解,我打算后面的章节好好介绍它的用途。
sb.superclass=spp呢?superclass又是什么?这个是Ext无中生有的一个属性而已,让子类知道它的父类是谁而已,一个标记,呵呵
综上,三部曲已经出来了吧?
第一、将属性和方法都继承下来
第二、恢复constructor,建立superclass指针
第三、将子类的属性写入到子类里
看完这3节,我想你对Ext.extend不仅有了了解,而且应该体会到Ext的编码规范,通常定义一个类,有这个三步
第一:定义Child类
Child = function(){
}
第二:Ext.extend(Child,Father,{定义Child的属性})
第三:Child.prototyp = {定义Child的方法};
或者可以只用父类和属性直接构造子类
Child = Ext.extend(Father,{});
Ext更多用这个方法,并且将方法也写入{}里面,这个方法较之上面的,多了一个神奇的第三步,见上面的代码,期间的奥秘就在于,new Child()的时候,委托谁来构造,上面是Child自己来构造,而下面这种调用方式是委托Father来构造
分享到:
相关推荐
在ExtJS中,`Ext.extend()` 是一个核心的函数,用于实现类之间的继承机制。它允许你创建新的类(子类),这些类将继承另一个类(父类)的属性和方法。这个功能对于构建复杂的JavaScript应用程序至关重要,因为它提供...
总结起来,Ext的核心源码分析涉及了JavaScript的继承、对象复制、函数调用上下文的改变以及原型机制。这些概念是理解Ext框架工作原理的基础,也是JavaScript开发中的重要知识。通过深入研究这些源码,开发者可以更好...
10. **源码分析**:EXT的开源特性使得我们可以深入研究其源码,了解基础控件的工作原理,这对创建自定义控件非常有帮助。 在"extcomp"这个压缩包中,可能包含了EXT自定义控件的源代码、示例、文档等资源,通过学习...
源码分析涉及组件架构、事件处理流程、数据绑定机制等方面,对于定制高级功能和调试问题尤为重要。 **九、程序规划入门** 在使用EXT JS进行项目开发前,合理的规划至关重要。这包括选择合适的布局、定义组件层次、...
- **发布Ext源码时的一些细节**: 讨论了发布EXT源码时需要注意的事项。 - **我应该从哪里开始?**: 给出了新手入门的建议。 - **适配器Adapters**: 介绍了适配器模式在EXT中的应用。 - **核心Core**: 探讨了EXT的...
5. **源码分析** 通过查看Ext.Window的源码,我们可以理解其内部工作原理。源码中包含了窗口的渲染逻辑、尺寸管理、拖动和缩放行为等。这有助于我们进行高级定制,例如自定义拖动行为或者添加特殊效果。 6. **工具...
源码分析方面,`monthPick.js`可能包含以下关键部分: 1. **类定义**:创建一个新的DateField子类,可能命名为`MonthPicker`,继承自Ext.form.field.DateField。 2. **配置项**:定义新的配置选项,如`...
通过分析源码,我们可以看到它定义了一个名为`TDGi.tabScrollerMenu`的类,继承自`Ext.util.Observable`,并实现了与Ext JS TabPanel组件的集成。插件的核心方法包括初始化、添加和移除选项卡,以及处理下拉菜单的...
- **实例分析**: 分析具体案例来理解继承的应用场景。 #### 16. 补充资料 - **EXT2概述**: 简要介绍EXT2版本的新特性。 - **组件模型**: 解释EXT中的组件模型。 - **容器模型**: 描述容器组件的概念和用途。 - **...
- **源码分析**:深入分析EXT的源码结构,帮助开发者理解其内部机制。 - **细节讲解**:特别关注了在发布EXT源码过程中需要注意的细节问题,如兼容性考虑、性能优化等。 #### 10. EXT程序规划入门 - **准备工作**:...
源码分析可以帮助开发者更好地掌握框架的工作原理,从而更有效地进行调试和优化。源码概述章节通常会介绍EXT的架构设计、关键模块的功能及其实现方式,以及在发布源码时需要注意的细节,如依赖管理、代码结构和最佳...
1. **组件定义**:首先,开发者会定义一个新的类,继承自Ext的基础组件类,例如Ext.Container或Ext.Panel,并重写相关方法以实现月份选择的功能。 2. **模板(Template)**:为了显示月份列表,可能需要定义一个...
2. **源码分析**:通过深入源码,探讨了Ext JS组件的工作原理,可能涉及到事件处理、渲染流程、数据绑定等核心概念。 3. **ImageField组件**:详细介绍了如何创建一个自定义的“ImageField”,可能包括了组件的配置...
在分析 Yii 源码时,我们首先要理解框架的基本结构和核心组件的工作原理。 1. **入口文件(index.php)**: 入口文件是每个 Web 应用程序的起点,对于 Yii 而言,`index.php` 文件是应用的入口。在这个文件中,Yii...
extjs底层源码实现继承分析【04】V1.0
- **源码分析**:深入分析Ext的关键实现细节,如作用域、继承等概念。 - **开发建议**:针对开发者给出的一些建议和注意事项。 #### 10. **EXT程序规划入门** - **事前准备**:列出开发前需要做的准备工作,如环境...
通过分析源码,你可以看到如何实现文件的创建、删除、读取和写入,以及如何高效地管理磁盘空间。此外,这也有助于学习如何处理错误情况、如何进行文件系统检查和修复,以及如何设计和实现一个健壮的文件系统。