Extjs中命名空间Ext.ns()的使用
使用了命名空间类似于Java的包一样,可以将一些东西隐藏起来。防止全部变为全局变量。
如果没有命名空间,那么要么你在函数对象里面写得很多很多,那样全局变量就会少了很多全局变量,但是当你做的项目比较大的时候,那代码就很不清晰乱成一团了。使用命名空间可以减少全局变量的声明以至于不影响其他对象里的变量。
不过当你命名变量的时候你最好使用 var关键字,如果你没有用var关键字声明变量的话,那么你的变量将默认是全局的是window下的变量。
不过利用闭包也可以起到效果,不过没试过,是这样的函数声明使用(function(){})();
下面讲一下命名空间的使用,Ext.ns()是Ext.namespace()的缩写,用来声明命名空间。
其实熟悉一下javascript的语法就知道根本就没有这样的东西。其实Ext只是利用了对象添加的属性类似的用法来模拟命名空间(或包)。因为对象或者方法是闭包的,其内定义的变量对外界是封闭的。
Ext.ns('MySpace'); //相当于你定义了一个空的函数对象(或者认为是一个类),可以写成MySpace = Ext.emtyFn();或者MySpace = {}MySpace.app = Ext.Panel({}); //这个MySpace.app是往MySpace对象里面添加属性,属性名为app(它是一个Panel的函数对象)。如果 Ext.ns('MySpace', 'MySpace.data' , 'MySpace.views'); //那么就相当于你定义了三个对象,MySpace ,还有MySpace的data,views属性都是一个对象,那么你就可以往MySpace.data.moumou来添加这个对象的属性了。
Ext.ns()还有一个特点就是,Ext.ns('MySpace.data.box'); 跟Ext.ns('MySpace', 'MySpace.data','MySpace.data.box')是一样的。还有如果你定义了一个命名空间的话,那么如果你放在第一个js里,那么命名空间里的任何东西都会在你之前有效,不会,只声明而没有定义。因为在此之前你的那些属性已经在前面(命名空间里提到,用得话那么就在命名空间之前赋值了)。
使用命名空间,可以把views,data,class分成不同的js文件,放在不同的文件夹,那会是代码更加清晰整洁,也有利于维护更改.