function NameSpace(ns) {if (!ns) {return null;}var arr = ns.split('.');//第一次调用的时候window.utry的值为{};//第二次调用的时候window.utry的值为window.utry;window[arr[0]] = window[arr[0]] || {};//obj是window.utry的引用var obj = window[arr[0]];//result也是window.utry的引用var result = obj;var len = arr.length;//注意i是从1开始的for (var i = 1; i < len; i++) {//第一次调用的第一次循环obj.base的值是{};//因为obj是window.utry的引用,那么window.utry.base的值就是{};obj[arr[i]] = obj[arr[i]] || {};//obj变成了window.utry.base的引用//第二次循环的时候,就变成了对window.utry.base.sys的赋值了obj = obj[arr[i]];}return result;}NameSpace("utry.base.sys");utry.base.sys.fn = function () {alert("这是名称空间里的一个方法");}//这是为了证明函数不会被覆盖掉NameSpace("utry.base.sys");utry.base.sys.fn();//咦,这样可以打印出函数体alert(utry.base.sys.fn);