命名空间(namespace)是Extjs组织代码的一个非常精巧的方式。通过这一方式,可以将数量庞大的js代码分类到不同的命名空间下,可以有效地解决js容易产生变量冲突的问题,让不同命名空间下的变量和对象的取名更自由而不受同名的约束。下面看看命名空间应用的例子:
从上面例子可以看出,一个字符串("App.common.util"),经过Ext.namespace处理之后,便能像正常的js代码对象一样可以任意的添加属性(MyFormValidater 、DataGetter )。到底是什么动作可以产生这样的效果呢。看源代码(以下代码出自3.2版本):
经过上面的处理之后,我们上面的例子代码实际上等效于:
window['App'] = {};
window['App'] ['common'] = {};
window['App'] ['common'] ['util']= {};
由于window是一个全局对象,所以:
App = {};
App.common = {};
App.common.util = {}
由上面的分析,命名空间其实就是window全局对象下面的各个对象树(还可以定义App.common.form等等)