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);