var menu=new menu.dd("menu");
var menu=function(){
function dd(n){this.n=n;alert(this.n)}
        return {dd:dd}
}
一个国外牛人写的一个导航截取了不懂的地方,那位牛人帮忙解释一下我的疑问
1.var menu=new menu.dd("menu"); 这种方式初始化的对象指什么 dd?
2.return{dd:dd} 这个地方没理解
就上面的两个问题,明白的牛人希望不惜赐教!

解决方案 »

  1.   


    var cls = menu.dd;
    var menu=new cls("menu");var menu=function(){
      return {dd:function(n){this.n=n;alert(this.n)}}
    }
    menu().dd(111);
      

  2.   


    var menu=new menu.dd("menu");
    var menu=function(){
         function dd(n){this.n=n;alert(this.n)}
         return {dd:dd}
    }
    1.var menu=new menu.dd("menu"); 这种方式初始化的对象指什么 dd?
    ==>menu["menu"] = "menu;"
    2.return{dd:dd} 这个地方没理解
    返回了一个对象 就是
    var menu=function(){
         function dd(n){this.n=n;alert(this.n)}
         return {dd:dd}

    等价于
    menu = {dd:dd};
      

  3.   

    在蓝色理想上也看到了楼主的提问帖。
    蓝色理想上以为朋友把2看做闭包。
    雷同 cj205 版主。
    但是
    var menu=function(){
      function dd(n){this.n=n;alert(this.n)}
      return {dd:dd}
    }  
    alert(menu)是function(){
      function dd(n){this.n=n;alert(this.n)}
      return {dd:dd}
    }  而非是{dd:dd};
    如果按照闭包理解,则至少需要两个()即
    var menu=(function(){
      function dd(n){this.n=n;alert(this.n)}
      return {dd:dd}
    })();
      

  4.   

    不好意思忽略了();下面是所有的源代码,这个是在网站找的一个层级菜单,一个国外的牛人写的 兼容性很不错就拿下来研究了一下,还有有一定的收获,尤其在我提的那个问题上,看来闭包光理解还不行,用是关键~ 继续努力中,至于这个问题,大家继续发表自己的见解,希望对其他的朋友也会有所帮助!var menu=function(){
    var t=15,z=50,s=6,a;
    function dd(n){this.n=n; this.h=[]; this.c=[]; alert(this.n)}
    dd.prototype.init=function(p,c){
    a=c; var w=document.getElementById(p)/* 获取整个菜单根节点*/, s=w.getElementsByTagName('ul')/*获取二级栏目集合*/, l=s.length,/*二级栏目的个数*/ i=0;
    for(i;i<l;i++){//遍历 ul 即所有一级栏目
    var h=s[i].parentNode; /*获取当前栏目的根节点li*/this.h[i]=h;/*获取当前栏目标题*/ this.c[i]=s[i];//获取当前栏目的子栏目

    //给一级栏目绑定事件
    h.onmouseover=new Function(this.n+'.st('+i+',true)');//传入的两个参数一个是当前的ul索引值 一个是布尔值
    h.onmouseout=new Function(this.n+'.st('+i+')');
    }
    }
    dd.prototype.st=function(x,f){//为继承对象的属性所以采用了这种 绑定方式
    var c=this.c[x]/*当前的一级栏目的2级栏目*/, h=this.h[x]/*当前一级栏目*/, p=h.getElementsByTagName('a')[0];//获取当前一级栏目a标签
    clearInterval(c.t); c.style.overflow='hidden'; /*当显示内容超过了限定高度多余的部分隐藏*/
    if(f){
    //alert(p.className);
    p.className+=' '+a;//获取一级栏目className    p.className = menulink  menuhover
    //alert(p.className);
    if(!c.mh){c.style.display='block';/*当鼠标移动到一级栏目上是是否显示其子栏目 */ c.style.height=''; c.mh=c.offsetHeight;/* 获取二级菜单展开高度*/c.style.height=0}
    if(c.mh==c.offsetHeight){c.style.overflow='visible'}
    else{c.style.zIndex=z; z++; c.t=setInterval(function(){sl(c,1)},t)}//用对象的一个属性作为 setInterval()的返回值
    }else{p.className=p.className.replace(a,'');/*replace()方法用于替换字符串 第一个参数是旧值  第二个参数是新值*/ 
    c.t=setInterval(function(){sl(c,-1)},t)}
    }
    function sl(c,f){
    var h=c.offsetHeight;
    if((h<=0&&f!=1)||(h>=c.mh&&f==1)){
    if(f==1){c.style.filter=''; c.style.opacity=1; c.style.overflow='visible'}
    clearInterval(c.t); return
    }
    var d=(f==1)?Math.ceil((c.mh-h)/s):Math.ceil(h/s), o=h/c.mh;
    c.style.opacity=o; c.style.filter='alpha(opacity='+(o*100)+')';
    c.style.height=h+(d*f)+'px'
    }
    return{dd:dd}
    }();
      

  5.   

    javascript的OO写法好象.
    菜鸟偶看不懂了.
      

  6.   

    http://topic.csdn.net/u/20090217/13/653f7949-9e0c-4e99-adb3-dcbc99fca8d5.html
    看下上面这个吧var menu=function(){
    function dd(n){this.n=n;alert(this.n)}
      return {dd:dd}
    }();这个是实质上是自执行函数返回了一个对象,即return的部分,var menu=new menu.dd("menu");
    menu.dd("menu")这个应是实例一个对象.调用的 menu对象的dd方法。函数体即dd.但这里用new不知为何意?
      

  7.   

    有demo地址吗?这样写主要是为了封装函数,不容易和同我函数产生混乱,可以理解解为私有方法。
      

  8.   


    demo地址~
    http://www.leigeber.com/2008/05/sliding-javascript-menu-highlight-1kb/ 
      

  9.   

    敢问上面的var t=15,z=50,s=6,代表什么含义吗?我看了一天都没明白这几个参数的含义啊?