每天一点点-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代码

})();


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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值