`
hideto
  • 浏览: 2650040 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Ext源码解析:1, Ext.js

阅读更多
来自http://www.beyondrails.com/blogs/17

Ext版本: 2.1

Ext.js位于Ext源代码的core目录下,它定义了Ext的核心工具和方法集

Ext是一个singleton,不能直接使用new来创建,因为Ext源码中没有声明Ext的constructor
Ext = {version: '2.1'};

声明了Ext对象,其中version属性为'2.1'

然后定义了Ext.apply方法:
Ext.apply = function(o, c, defaults){
    if(defaults){
        // no "this" reference for friendly out of scope calls
        Ext.apply(o, defaults);
    }
    if(o && c && typeof c == 'object'){
        for(var p in c){
            o[p] = c[p];
        }
    }
    return o;
};

Ext.apply方法将c对象中的属性全部copy到o对象中,并且最后返回o对象

然后紧接着是一个"Module Pattern"的使用:
(function(){
    // ...
    Ext.apply(Ext, {
        // ...
    });
    // ...
})();

Module Pattern实际上是一个Singleton模式,最后的()表示该匿名方法会立即执行

其中在Ext.apply那一大段代码里,声明了很多public的属性和方法,如:
Ext.isIE
Ext.isGecko
Ext.isSafari
Ext.isWindows
Ext.isLinux
Ext.isMac
------------------------
Ext.namespace()
Ext.applyIf()
Ext.extend()
Ext.override()
Ext.getDom()
Ext.isArray()

接下来对一些类进行扩展,添加了一些方法:
对Function类全局添加了几个方法,这样所有的Function对象(也即所有的JavaScript方法)都具有如下方法: createCallback/createDelegate/createInterceptor/createSequence/defer
对String类添加了escape/format/leftPad/toggle/trim方法
对Number类添加了constrain方法
对Array类添加了indexOf/remove方法
对Date类添加了getElapsed方法

我们重点分析一下Ext.namespace/Ext.extend/Ext.override方法
首先分析一下Ext.namespace方法
namespace : function(){
    var a=arguments, o=null, i, j, d, rt;
    for (i=0; i<a.length; ++i) {
        d=a[i].split(".");
        rt = d[0];
        eval('if (typeof ' + rt + ' == "undefined"){' + rt + ' = {};} o = ' + rt + ';');
        for (j=1; j<d.length; ++j) {
            o[d[j]]=o[d[j]] || {};
            o=o[d[j]];
        }
    }
}

该方法实现的非常灵活,可以给namespace传递多个String参数,每个String又可以带'.'来描述命名空间的父子关系,调用方式:
Ext.namespace('com.beyondrails.hideto');
// com = { beyondrails : { hideto : {} } }
Ext.namespace('foo', 'bar')
// foo = {}
// bar = {}

然后我们看看Ext.override方法:
override : function(origclass, overrides){
    if(overrides){
        var p = origclass.prototype;
        for(var method in overrides){
            p[method] = overrides[method];
        }
    }
}

很简单,将overrides中所有方法覆盖到origclass中

最后我们来看看Ext.extend方法:
extend : function(){
    // inline overrides
    var io = function(o){
        for(var m in o){
            this[m] = o[m];
        }
    };
    var oc = Object.prototype.constructor;
    
    return function(sb, sp, overrides){
        if(typeof sp == 'object'){
            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;
        sbp = sb.prototype = new F();
        sbp.constructor=sb;
        sb.superclass=spp;
        if(spp.constructor == oc){
            spp.constructor=sp;
        }
        sb.override = function(o){
            Ext.override(sb, o);
        };
        sbp.override = io;
        Ext.override(sb, overrides);
        sb.extend = function(o){Ext.extend(sb, o);};
        return sb;
    };
}()

这段代码比较诡异,一般来说继承的JavaScript实现就将subclass.prototype = new superclass(),这里也是这样实现的
不过Ext在这里还给subclass加上了一个superclass属性和一个override方法
而且这里支持两种方式的调用:
Ext.extend(Class1, {a:1, b:2})
Ext.extend(Class1, Class2, {a:1, b:2})

其中需要注意的是直接写成Object Literal方式的对象会override而不是extend
分享到:
评论

相关推荐

    Ext_JS源码分析与实例宝典.pdf

    Ext_JS源码分析与实例宝典 Ext_JS源码分析与实例宝典Ext_JS源码分析与实例宝典Ext_JS源码分析与实例宝典Ext_JS源码分析与实例宝典Ext_JS源码分析与实例宝典

    Ext江湖(完整+书签).part1

    本书以幽默诙谐的语言由浅入深地解析了Ext框架的方方面面,包括JS基础、Ext的DOM和CSS封装、内置对象的扩展、事件系统、Ajax和Direct、数据和缓存架构、面向对象和继承、UI组件、布局管理、模板、特效、图表和报表、...

    Ext江湖(完整+书签).part2

    本书以幽默诙谐的语言由浅入深地解析了Ext框架的方方面面,包括JS基础、Ext的DOM和CSS封装、内置对象的扩展、事件系统、Ajax和Direct、数据和缓存架构、面向对象和继承、UI组件、布局管理、模板、特效、图表和报表、...

    ext4.2.1.883

    1、ExtJS可以用来开发RIA也即富客户端的AJAX应用,是一个用javascript写的,主要用于创建前端用户界面,是一个与后台技术无关的前端ajax框架。因此,可以把ExtJS用在.Net、Java、Php等各种开发语言开发的应用中。...

    ExtJS源码分析与开发实例宝典.part10(带书签)

    Ext+JS源码分析与开发实例宝典 是extjs3.0的学习书 书得内容很不错。深入解析extjs 资源是pdf文档. 本人自己还做了pdf的完整书签目录,便于方便和阅读. 文档比较大,一共压缩成12卷.需12卷全部下载完。 就第一个...

    ExtJS源码分析与开发实例宝典.part07(带书签)

    Ext+JS源码分析与开发实例宝典 是extjs3.0的学习书 书得内容很不错。深入解析extjs 资源是pdf文档. 本人自己还做了pdf的完整书签目录,便于方便和阅读. 文档比较大,一共压缩成12卷.需12卷全部下载完。 就第一个...

    ExtJS源码分析与开发实例宝典.part01(带书签)

    Ext+JS源码分析与开发实例宝典 是extjs3.0的学习书 书得内容很不错。深入解析extjs 资源是pdf文档. 本人自己还做了pdf的完整书签目录,便于方便和阅读. 文档比较大,一共压缩成12卷.需12卷全部下载完。 就第一个...

    ExtJS源码分析与开发实例宝典.part11(带书签)

    Ext+JS源码分析与开发实例宝典 是extjs3.0的学习书 书得内容很不错。深入解析extjs 资源是pdf文档. 本人自己还做了pdf的完整书签目录,便于方便和阅读. 文档比较大,一共压缩成12卷.需12卷全部下载完。 就第一个...

    ExtJS源码分析与开发实例宝典.part12(带书签)

    Ext+JS源码分析与开发实例宝典 是extjs3.0的学习书 书得内容很不错。深入解析extjs 资源是pdf文档. 本人自己还做了pdf的完整书签目录,便于方便和阅读. 文档比较大,一共压缩成12卷.需12卷全部下载完。 就第一个...

    ExtJS源码分析与开发实例宝典.part08(带书签)

    Ext+JS源码分析与开发实例宝典 是extjs3.0的学习书 书得内容很不错。深入解析extjs 资源是pdf文档. 本人自己还做了pdf的完整书签目录,便于方便和阅读. 文档比较大,一共压缩成12卷.需12卷全部下载完。 就第一个...

    ExtJS源码分析与开发实例宝典.part09(带书签)

    Ext+JS源码分析与开发实例宝典 是extjs3.0的学习书 书得内容很不错。深入解析extjs 资源是pdf文档. 本人自己还做了pdf的完整书签目录,便于方便和阅读. 文档比较大,一共压缩成12卷.需12卷全部下载完。 就第一个...

    ExtJS源码分析与开发实例宝典.part04(带书签)

    Ext+JS源码分析与开发实例宝典 是extjs3.0的学习书 书得内容很不错。深入解析extjs 资源是pdf文档. 本人自己还做了pdf的完整书签目录,便于方便和阅读. 文档比较大,一共压缩成12卷.需12卷全部下载完。 就第一个...

    ExtJS源码分析与开发实例宝典.part06(带书签)

    Ext+JS源码分析与开发实例宝典 是extjs3.0的学习书 书得内容很不错。深入解析extjs 资源是pdf文档. 本人自己还做了pdf的完整书签目录,便于方便和阅读. 文档比较大,一共压缩成12卷.需12卷全部下载完。 就第一个...

    ExtJS源码分析与开发实例宝典.part05(带书签)

    Ext+JS源码分析与开发实例宝典 是extjs3.0的学习书 书得内容很不错。深入解析extjs 资源是pdf文档. 本人自己还做了pdf的完整书签目录,便于方便和阅读. 文档比较大,一共压缩成12卷.需12卷全部下载完。 就第一个...

    ExtJS源码分析与开发实例宝典.part02(带书签)

    Ext+JS源码分析与开发实例宝典 是extjs3.0的学习书 书得内容很不错。深入解析extjs 资源是pdf文档. 本人自己还做了pdf的完整书签目录,便于方便和阅读. 文档比较大,一共压缩成12卷.需12卷全部下载完。 就第一个...

    ExtJS源码分析与开发实例宝典.part03(带书签)

    Ext+JS源码分析与开发实例宝典 是extjs3.0的学习书 书得内容很不错。深入解析extjs 资源是pdf文档. 本人自己还做了pdf的完整书签目录,便于方便和阅读. 文档比较大,一共压缩成12卷.需12卷全部下载完。 就第一个...

    Ajax框架ExtJS3.0源代码

    ExtJs3源码,有兴趣的朋友可以看看。

    浅谈Vuejs中nextTick()异步更新队列源码解析

    vue官网关于此解释说明如下: vue2.0里面的深入响应式原理的异步更新队列 官网说明如下: 只要观察到数据变化,Vue 将开启一个队列,并缓冲在同一事件循环中发生的所有数据改变。如果同一个 watcher 被多次触发...

    Ext_JSSource-analysis-and-instance.rar_Ajax_JavaScript_

    目前最强大的ajax框架Extjs的源码分析宝典,对源码进行生动的、详细的解析。是Extjs入门的好材料。

    代码生成器Mgicode生成器JAVA代码生成器

    由《Ext JS源码分析与开发实例宝典》作者:彭仁夔团队开发而成 90%以上代码可以生成验证、生成三层代码、生成完善的权限系统、生成数据库等功能 功能之强大用了就知道! 两年前,我负责指导Java方向实训,在最后...

Global site tag (gtag.js) - Google Analytics