每天一点点-EXTJS源码分析

从ext-base.js写起

window.undefined = window.undefined;

写法很奇怪?但js库基本都有这么一行。为什么要把自己赋给自己呢?

 注释写的比较明白,是为了兼容旧游览器,查询资料后发现,主要是IE5并没有定义Undefined这个基本类型,没有undefined这个特殊的全局属性,为了保持各个游览器的一致性,在IE5里没有,我们就为它添加这样一个全局属性,这行在IE5中等价于window.undefined="undefined";

Ext = {

    /**

     * The version of the framework

     * @type String

     */

    version : '3.0'

};


很简单,创建一个名为Ext的单例对象,现在这个EXT对象,里面只有一个属性version,就是版本号,我这里用的是EXT3.0版本,我自己比较浅显的理解是,它主要是给用户暴露出一个全局的对象,以便用户进而可以访问这个Ext对象的属性和使用这个对象的方法。

就如同其名(ext-base),它是搭建EXT绚烂世界的基础。

Ext.apply = function(o, c, defaults){

    // no "this" reference for friendly out of scope calls

    if(defaults){

        Ext.apply(o, defaults);

    }

    if(o && c && typeof c == 'object'){

        for(var p in c){

            o[p] = c[p];

        }

    }

    return o;

};


首先,从EXTJS框架整体上看(其实是个人猜测,请指正),EXT先写这个函数的作用是为了方便给给不同的对象添加属性和函数。

注:for-in主要用来迭代出对象的全部属性

分析下,这个方法的实现。

Ext对象添加的第一个方法,首先理解其用处是,如果第二个参数不存在的情况下,把第二个对象里的属性赋给第一个对象,很显然如果有同名属性的话,第一个属性里的这个同名属性会被覆盖掉,如果第三个参数存在的话,就会调用Ext.apply本身这个函数,注意下调用的时候defaults被当成第二个参数,第三参数没有。,然后,第一个对象也就添加了defaults的所有属性,这个调用本身的Ext.apply执行结束。然后再顺序执行 

  

if(o && c && typeof c == 'object'){

        for(var p in c){

            o[p] = c[p];

        }

  }


 也就是第一个参数对象拷贝第二个参数对象的属性。

总结,就是第一个对象复制第二个对象的所有属性,如果有第三个参数,会把第三个参数对象的属性也复制进第一个参数对象中(也就是提供一个默认值),个人觉得,翻译版的官方文档中对这个函数解释的并不准确。

下面Ext所有的代码就都放在的就是一个立即执行的闭包中,这和jquery有异曲同工之妙,为了防止添加过多的全局变量。

(function(){

...Extjs代码

})();


后面的代码,对于我来说还是比较有难度的,每天一点点,一定要坚持,加油。

 

你可能感兴趣的:(每天一点点-EXTJS源码分析)