function ns(pac){ if(!pac) { return null; } var arr=pac.split("."); var tt=window[arr[0]]; var cc=window.c2; window.c2={}; var tt2=window[arr[0]]||{}; var o=window[arr[0]]=window[arr[0]]||{}; var result=o; var len=arr.length; for(var i=1;i<len;i++) { o=o[arr[i]]=o[arr[i]]||{}; } return result; } ns("com.yumei.test"); ns("com.yumei.mytest"); com.yumei.test.fn=function(){ alert("test"); }; alert(com.yumei.test.fn);
上面的函数就是建立命名空间的函数,有几个知识点,是学到这里才稍微明白点的。
1:var tt=window[arr[0]];//这个时候tt的值是undefined,因为这个时候window的arr[0]这个属性没有值。
原因是arr[0]没有人赋值给它。arr[0]={};这个才是赋值。
同理cc开始也是undefined。
window.cc={};这个时候window就有cc这个属性啦。
2:命名空间是个全局的变量,所以按照设计应该放到window下面缓存起来就最合适啦。
3:var o=window[arr[0]]=window[arr[0]]||{};
起到的作用是先判断window是否有arr[0]这个属性有就第二个等号赋值覆盖,没有就赋值为{};
||的作用是从左到右直到取到有效的值才停止。所谓有效的值是除0,null,undefined,'',NaN