Ext 4 概述(三)之Env命名空间 & 语言增强包 & Ext.Function

    技术2022-05-20  27

    Env命名空间

    提供浏览器和操作系统的相关信息,还有告诉我们现代浏览器提供了什么功能。

    Ext.env.Browser

    该类提供了全部浏览器的元信息(名称、引擎、版本、是否 Strict 模式等等。

    Ext.env.FeatureDetector

    这是一个在 Ex JS 3 中没有类,完全新的功能,其功能在于检测浏览器特性如何,主要针对现代 HTML5 和 CSS3 的特性,包括移动平台在内的特性列表,有:

    CSS 变形、动画、转换 Canvas、SVG、VML 触控能力、方向 导航 Geolocation SqlDatabase Websockets History Audio Video

    Ext.env.OS

    提供当前主机操作系统的信息(包括移动 OS 的列表)。

    语言包(Lang Package)

    同样的功能在Ext中都会有,但这是一个新的包,之所以定义为一个新的包,是为了尽量不会影响到 JavaScript 的对象原型。尽管在对象原型中设置方法会比较方便,但是如果引入了其他 JavaScript 一起,很难说会不会构成冲突或者影响的说。再者,如果日后 ECMAScript 规范作出了修订,会不会与 Ext JS 所定义的构成重叠呢?所以,要解决以上顾虑,我们还是把语言方法的命名空间定义在 Ext 对象之下,避免在对象原型身上定义的成员。

    实际上虽然没有分配一个“lang”的这么一个命名空间,但是还是在源码树(Source Tree)中划分了一份文件专门定义语言增强函数。前后变化如下:

    Array → Ext.Array Date → Ext.Date Function → Ext.Function Number → Ext.Number Object → Ext.Object String → Ext.String

    请注意在兼容化文件中,仍会对核心对象的原型挂载方法之引用。重申一下,要真正升级到 Ext JS 4并摆脱 Ext JS 3 旧的调用方式,就必须移除兼容化文件,最后升级到新的命名空间形式。

    Ext.Function

    Ext JS 4 的函数原型 Function prototype 改变后,怎么调用?最主要的一点就是命名上发生变化,如 Function.createDelegate() 和 Function.createCallback() 分别重命名为 Ext.Function.bind() 和 Ext.Function();Function.defer() 变化为 Ext.Function.defer()。由于使用频率较高,我们在 Ext 对象上添加了快捷访问方式,便是 Ext.bind()、Ext.pass() 和 Ext.defer();其余的函数方法像 createSequence() 和 createInterceptor() 就取消了,但引入新方法 createBuffered() 和 createThrottled(),可以看看有什么用途。

    如下是一些语法糖说明前后之变化:

    // Ext 3: myFunction.createDelegate(this, [arg1, arg2]); myFunction.defer(1000, this); // Ext 4: Ext.bind(myFunction, this, [arg1, arg2]; Ext.defer(myFunction, 1000, this);


    最新回复(0)