Ext.js源代码分析

文件:ext-2.3.0/source/core/Ext.js
 
概述:Ext.js主要负责创建Ext全局对象,构建其命名空间,定义extend类继承方法,探测浏览器信息和对Javascript原生库进行扩展。
 
分析:
 
一、创建Ext全局对象
Js代码  
// 创建Ext全局对象,大多数JS库为了避免和其他JS库命名冲突,都会把自己创建的类或函数封装到一个全局变量中去,  
// 这样就相当于创造了自己的命名空间,可以算是一个单例模式。例如,jQuery就是全部都封装到$变量中去。  
Ext = {version: '2.3.0'};  
 
二、设置全局undefined变量
Js代码  
// 兼容旧浏览器,早期的浏览器实现中,undefined并不是全局变量。就是说,你要判断一个变量是否是没定义,  
// 你需要这样写if (typeof  a == 'undefined'),不可以写成if (a == undefined)。所以,上面的代码就可以理解了。  
// 右面的window["undefined"],因为window对象没有undefined属性,所以其值为undefined,  
// 把undefined赋值给window的undefined属性上,就相当于把undefined设置成了全局变量,  
// 这样以后你再判断一个变量是否是未定义的时候,就不需要使用typeof,直接判断就可以了。  
window["undefined"] = window["undefined"];  
 
三、定义apply方法属性复制函数
Js代码  
// apply方法,把对象c中的属性复制到对象o中,支持默认属性defaults设置。这个方法属于对象属性的一个浅拷贝函数。  
Ext.apply = function(o, c, defaults){  
    if(defaults){  
        // 如果默认值defaults存在,那么先把defaults上得属性复制给对象o  
        Ext.apply(o, defaults);  
    }  
    if(o && c && typeof c == 'object'){  
        for(var p in c){  
            o[p] = c[p];  
        }  
    }  
    return o;  
};  
 
四、扩展Ext对象
Js代码  
(function(){  
    // idSeed,用来生成自增长的id值。  
    var idSeed = 0;  
  
    // ua,浏览器的用户代理,主要用来识别浏览器的型号、版本、内核和操作系统等。  
    var ua = navigator.userAgent.toLowerCase(),  
        check = function(r){  
            return r.test(ua);  
        },  
        
        // isStrict,表示当前浏览器是否是标准模式。  
        // 如果正确的设置了网页的doctype,则compatMode为CSS1Compat,否则为BackCompat  
        isStrict = document.compatMode == "CSS1Compat",  
  
        // isOpera,表示是否是opera浏览器。  
        isOpera = check(/opera/),  
  
        // isChrome,表示是否是谷歌浏览器。  
        isChrome = check(/chrome/),  
  
        // isWebKit,表示当前浏览器是否使用WebKit引擎。  
        // WebKit是浏览器内核,Safari和Chrome使用WebKit引擎。  
        isWebKit = check(/webkit/),  
  
        // isSafari,表示是否是苹果浏览器,下面代码是对其版本识别。  
        isSafari = !isChrome && check(/safari/),  
        isSafari2 = isSafari && check(/applewebkit\/4/), // unique to Safari 2  
        isSafari3 = isSafari && check(/version\/3/),  
        isSafari4 = isSafari && check(/version\/4/),  
  
        // isIE,表示是否是IE浏览器,下面代码是对其版本识别。  
        isIE = !isOpera && check(/msie/),  
        isIE7 = isIE && check(/msie 7/),  
        isIE8 = isIE && check(/msie 8/),  
        isIE6 = isIE && !isIE7 && !isIE8,  
  
        // isGecko,表示当前浏览器是否使用Gecko引擎。  
        // Gecko是浏览器内核,Firefox使用Gecko引擎。  
        isGecko = !isWebKit && check(/gecko/),  
        isGecko2 = isGecko && check(/rv:1\.8/),  
        isGecko3 = isGecko && check(/rv:1\.9/),  
  
        // isBorderBox,表示浏览器是否是IE的盒模式。  
        // 众所周知,IE的盒模式和W3C的盒模式不一致。当IE浏览器在怪异模式下,就会导致错误的盒模式。  
        isBorderBox = isIE && !isStrict,  
  
        // isWindows,表示是否是windows操作系统。  
        isWindows = check(/windows|win32/),  
  
        // isMac,表示是否是苹果操作系统。  
        isMac = check(/macintosh|mac os x/),  
  
        // isAir,AIR(Adobe Integrated Runtime),是adobe开发的一个平台吧,不太了解,没用过。  
        isAir = check(/adobeair/),  
  
        // isLinux,表示是否是Liunx操作系统。  
        isLinux = check(/linux/),  
  
        // isSecure,表示是否是https连接。  
        isSecure = /^https/i.test(window.location.protocol);  
  
    // 缓存一下CSS的背景图像,防止图像闪烁,应该是IE6的一个bug。  
    if(isIE6){  
        try{  
            document.execCommand("BackgroundImageCache", false, true);  
        }catch(e){}  
    }  
  
    // 扩展Ext对象,有一些属性,这个文件中没有使用,现在先不解释其作用,后面遇到了再讲。  
    Ext.apply(Ext, {  
  
        // isStrict,表示是否是标准模式。  
        isStrict : isStrict,  
  
        // isSecure,表示是否是https连接。  
        isSecure : isSecure,  
  
        // isReady,表示Dom文档树是否加载完成  
        isReady : false,  
  
        // enableGarbageCollector和enableListenerCollection这两个变量在Element中使用了,解析到Element时再解释其含义。  
        enableGarbageCollector : true,  
  
        enableListenerCollection:false,  
  
        // SSL_SECURE_URL,这个值在构造隐藏的iframe时,用来设置src属性的,只是当是https连接的时候才用。  
        SSL_SECURE_URL : "javascript:false",  
  
        // BLANK_IMAGE_URL,1像素透明图片地址  
        BLANK_IMAGE_URL : "http:/"+"/extjs.com/s.gif",  
  
        // emptyFn,空函数  
        emptyFn : function(){},  
  
        // applyIf,把对象c的属性复制到对象o上,只复制o没有的属性  
        applyIf : function(o, c){  
            if(o && c){
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值