(
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;
}
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;
}
/*
这是个脚本的闭包写法,即加载后就运行,(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
你给的方法里,是调用外部方法,将方法名字注册到本页面并返回