`

[Ext源码]Ext的核心方法

    博客分类:
  • Ext
阅读更多
Ext.extend方法:
extend : function(){
            // inline overrides
            var io = function(o){
                for(var m in o){
                    this[m] = o[m];//io的调用对象将获得o的所有属性
                }
            };
            var oc = Object.prototype.constructor;//对象直接量的构造函数

            return function(sb, sp, overrides){//子类、父类、做为子类添加属性源的直接量对象
                if(Ext.isObject(sp)){//双参数,第一个是父类、第二个是对象直接量
                    overrides = sp;
                    sp = sb;
                    sb = overrides.constructor != oc ? overrides.constructor : function(){sp.apply(this, arguments);};
					//对象直接量有构造函数则直接做为子类构造函数,没有则采用父类的构造方法
                }
                var F = function(){},
                    sbp,
                    spp = sp.prototype;//父类原型对象

                F.prototype = spp;//F的原型与父类原型引用相同
                sbp = sb.prototype = new F();//父类原型的新实例做为子类原型对象
                sbp.constructor=sb;//为子类添加构造函数
                sb.superclass=spp;//为构造函数添加属性superclass,此属性引用父类原型
                if(spp.constructor == oc){//如果父类构造函数是直接量构造函数则将父类
                    spp.constructor=sp;
                }
                sb.override = function(o){//为子类构造函数添加override方法属性
                    Ext.override(sb, o);
                };
                sbp.superclass = sbp.supr = (function(){//为子类原型添加两个方法属性,作用都是返回父类原型对象
                    return spp;
                });
                sbp.override = io;//为子类原型添加override方法,作用跟构造函数的override方法相同,参数不一样罢了
                Ext.override(sb, overrides);//重写子类的方法
                sb.extend = function(o){return Ext.extend(sb, o);};//为子类构造函数添加extend方法
                return sb;
            };
        }(),

该方法使用了自执行一个闭包,我们可以这样来理解这个闭包:首先,
function(){}()
该函数是个匿名自执行函数,也就是说在定义完成的时候这个函数就已经执行完毕了,在这里,该函数返回了一个Function对象,由于返回的Function对象对于自执行函数的调用对象(函数调用对象保存着函数的作用域链、参数、局部变量等信息)存在着引用(io和oc对象)自执行函数的调用对象将不再被垃圾回收,从而使得返回的Function对象拥有了该函数的作用域(自执行函数的作用域链将做为返回函数的上层作用域链而存在),这样做的结果就是使得io和oc保存在一个封闭的作用域中,所有返回的Function函数对象中存在的io和oc对象都是对同一对象的引用,最终结果就是减少了创建这两个对象所需要的时间和空间开销;其次,应该明白Ext.extend属性所指向的不是那个自执行函数,而是它所返回的Function对象,当你每次用调用函数的方式执行Ext.extend的时候(例如:Ext.extend(...))实际上执行的是自执行函数所返回的函数。
该方法的核心作用:
1.为子类创建构造函数并将构造函数返回(返回的函数仅对于双参数的方法有用)
2.将子类原型属性指向父类实例,以使得子类原型拥有父类原型的全部属性;
3.使用Ext.override方法将直接量对象的属性赋予子类原型(同名方法将被覆盖);
4.为子类构造函数函数添加superclass属性,该属性指向父类原型对象(对于调用父类方法意义重大)
附加作用:
1.子类原型的superclass和supr属性,这两个属性使得子类实例可以引用到父类的原型属性;
2.为子类构造函数添加extend和override方法;
示例:

示例使用的是Chrome的javascript控制台,其中浅蓝色字体为输入部分
  • 大小: 36.8 KB
分享到:
评论

相关推荐

    Ext JS源码分析与开发实例宝典光盘源码

    Ext JS源码分析与开发实例宝典光盘源码Ext JS源码分析与开发实例宝典光盘源码Ext JS源码分析与开发实例宝典光盘源码Ext JS源码分析与开发实例宝典光盘源码Ext JS源码分析与开发实例宝典光盘源码Ext JS源码分析与开发...

    ext源码分析

    《EXT源码分析》 EXT是一个广泛应用于Web开发的JavaScript库,它提供了丰富的用户界面组件和数据管理功能,尤其在创建复杂的企业级应用时表现出色。EXT的核心是其组件模型和数据绑定机制,这两个特性使得EXT能够...

    ext JS 源码和学习资料

    EXT JS 的源码结构清晰,包括核心库、组件、布局、数据管理、表单元素等模块。通过阅读源码,开发者可以了解到EXT JS如何实现组件化、事件处理、数据绑定等功能,进一步优化自己的代码结构和性能。例如,ext-3.x版本...

    ext4文件系统源码

    这个源码包包含了EXT4文件系统的所有核心组件,是深入理解Linux文件系统工作原理的宝贵资源。 EXT4的设计目标是解决EXT3在大容量硬盘上的局限性,例如提高文件系统的最大容量和单个文件大小。在EXT4中,最大文件...

    ext 源码api 开发文档

    EXT源码API开发文档是一份宝贵的资源,适合开发者深入理解EXT的工作原理,优化性能,或者自定义组件。 1. **源码分析**:EXT源码提供了深入学习EXT框架的机会。通过阅读源码,开发者可以了解EXT内部的工作机制,...

    EXT4 源码+window下模拟ext2+linux_ext文件系统模拟

    在源码中,你会看到诸如`fs/ext4`这样的目录,其中包含了EXT4文件系统的所有核心组件。这些组件包括超级块(superblock)、inode、目录项、日志管理、块分配器等。通过对这些源码的深入研究,可以了解EXT4如何管理...

    ext 3.0源码+帮助文档chm

    在深入学习EXT 3.0源码时,建议先从核心类开始,例如Ext.Element(基础DOM操作)、Ext.Panel(基本组件)和Ext.data.Store(数据管理)。了解这些基础类的用法和实现原理后,再逐步探索更复杂的组件和功能,如Grid、...

    深入浅出ext js源码

    5. **Ajax通信**:EXT JS提供了封装的Ajax请求方法,通过源码可以了解它是如何处理异步请求的。 6. **主题与皮肤**:EXT JS支持更换主题,源码中可以看到如何定制和应用不同的视觉样式。 通过详细阅读和分析这些源...

    ext 3.2源码

    EXT 3.2源码分析 EXT JS是一个流行的JavaScript库,专为构建富客户端Web应用程序而设计。EXT 3.2版本是EXT JS历史上的一个重要里程碑,它包含了许多功能改进和性能优化。深入理解EXT 3.2的源码对于开发者来说至关...

    Ext江湖源码

    【标题】"Ext江湖源码"揭示了这个压缩包文件主要包含的是关于Ext JavaScript库的源代码。Ext是一个流行的前端开发框架,它提供了一系列用于构建交互式Web应用的组件和工具。"大漠孤烟"可能是指某个知名的开发者或者...

    Ext核心源码分析.doc

    《Ext核心源码分析》 Ext是一个强大的AJAX框架,其核心源码的解析对于深入理解和运用该框架至关重要。在JavaScript中,实现继承是通过扩展Object对象的prototype属性来达到的,而Ext框架则提供了自己的一套实现机制...

    ext项目实例源码

    ext项目实例源码

    eWOW64Ext 模块源码.zip_易语言 源码

    eWOW64Ext源码库正是为解决这一问题而设计的,它是一个基于易语言的模块,提供了加载任意32/64位模块、动态调用函数以及64位进程读写的强大功能。本文将深入探讨eWOW64Ext的核心特性、工作原理及其在64位环境中的...

    Ext.Net界面源码C# ASPX

    这个“Ext.Net界面源码C# ASPX”的资源包含了一些使用C#和ASP.NET技术结合Ext.NET开发的界面示例源代码。 首先,我们要理解ASPX(ASP.NET页面)的概念。ASPX是ASP.NET中的网页文件扩展名,它允许开发者使用.NET ...

    Ext项目小框架介绍源码

    "Ext项目小框架介绍源码"可能是一个简单的示例项目,展示了如何使用Ext JS来搭建一个基本的Web应用。这个项目包含以下几个关键部分: 1. **index.html**:这是项目的入口点,通常包含页面的基本结构和引用的外部...

    ext2内核源码

    EXT2内核源码的学习涉及到Linux内核的文件系统部分,涵盖超级块、组描述符表、inode、块分配表和目录项等核心概念。深入分析EXT2源码有助于理解和优化文件系统操作,是Linux开发和系统管理员提升技能的重要途径。

    EXT源码及中文手册

    EXT2.2源码及中文手册,中文手册介绍了如何应用ext

    ext 3.3的源码

    ext3.3的源码,我自己用的就是这个,保证能用,要查看docs最好装个小型服务器

    EXT4.0项目源码

    EXT4.0项目源码是Linux操作系统中EXT4文件系统的一个重要版本的源代码,它在文件系统的性能、稳定性和可靠性方面进行了优化。EXT4,全称“Fourth Extended File System”,是EXT3的后续,旨在解决EXT3在处理大量小...

    ext 中文源代码

    这个“EXT 中文源代码”是EXT框架的部分源码,带有中文注释,使得国内开发者更容易理解和学习EXT的内部工作原理。 EXT的核心特性包括组件化开发、数据绑定、丰富的用户界面组件以及强大的图表功能。它提供了大量的...

Global site tag (gtag.js) - Google Analytics