(
function($ns) {
....
}
)(using('app.nntex'));其中using的定义如下:
function using(p){
p = p.split(/\s*\.\s*/g);
var m = window, d;
p.each(function(n){
if(d) d += '.' + n;
   else d = n;
  
if(!m[n]) m[n] = { $name : d };
else if(!m[n].$name) m[n].$name = d;

m = m[n];
});
return m;
}

解决方案 »

  1.   


     /*
    这是个脚本的闭包写法,即加载后就运行,(function s(a){alert(a);})("123")就会运行s("123")
    在这里,定义了一个未知名的函数体.传参为$ns,当加载后运行(using('app.nntex'))
    如果你不明白function($ns),也没什么,他就是没有名字而已,或者你给他加个名字也行
    function s($ns),在这里传进去的参数为using('app.nntex').
    如果想理解深,最好将参数打印(function($ns) {alert($ns);})(using('app.nntex'));
    */(function($ns) { 
    .... 

    )(using('app.nntex'));
    //其中using的定义如下: 
    /*
    在这里看看using要搞些什么东东
    */
    function using(p){ 
    p = p.split(/\s*\.\s*/g); //先将传进来的参数p格式化成数组,以.分割
    var m = window, d; //定义变量 注意以后m就是window了
    /*
    对于下面的这个,可能有点不好理解,或许你已经引了其他的库来扩展array
    在这里p既然是个array那么each方法也是专门为array提供的.
    其实他是一个对array扩展的编例执行的方法,很多js库里都有扩展.
    我这里有个 大概是这样子Array.prototype.each=function(f){for(var   i=0;i<this.length;i++)   f(this[i],i,this)} ;
    也就是说p.each(func(s){alert(s)});就意味着这数组里面的每一个都要去当做参数执行一下func(s)方法;
    好原理说完,看下面的实例:
    */
    p.each(function(n){ 
    if(d) d += '.' + n; 
      else d = n; //这个不用说了吧,把传近来d的给组装成.间隔的,也就是"asdc.as.s.d"形式.
      
    if(!m[n]) m[n] = { $name : d }; //如果window中不存在n,就给他注册一个让他的$name属性为d的域(叫类也行)
    else if(!m[n].$name) m[n].$name = d;//如果有就给属性赋值 m = m[n]; //将这个类给m
    }); //循环下去直到下标
    return m; //传回这个注册好的类
    }
    看明白了吧,主要的在using方法上,他负责将你传进的名字注册成类然后传回
    有一些可能不明白,但是这个跟很多面向对象的语言差不多.都是asd.ds.a.sda形式的
    在这里面,window是最高级别
    也就说 var fun1="";其实是window.fun1="";
    还有,方法function也是对象,在js叫一等对象
    比如:var fun2=function(){
    this.fun3=function(){
    return "";
    }
    }
    在js调用是fun2.fun3 
    你给的方法里,是调用外部方法,将方法名字注册到本页面并返回
      

  2.   

       &    up