s += " <td colspan=2> "+e+" <br/>"+dispObj(eval("o."+e)+"" )+" </td>"; 

解决方案 »

  1.   

    你的dispObj(e)并没有返回值,所以是 undefined. 稍微修改一下函数使s做为返回值返回可以解决。
    但是,按你这样递归,会有死循环的。
      

  2.   


    eval("o." + e) 可以写成 o[e]像上楼所说,你在递归的时候传的参数也错了,不过改对之后会提示溢出(死循环)。
      

  3.   


    是死循环,主要是在window对象上。window.window.window.window......... 可以无限级引用。
      

  4.   

    像top,self,parent等等都会死循环
      

  5.   

    0009,没有返回值的函数不能递归吗? 好象是可以的. 只是死循环问题如何解决?
    window.frames.window.frames.window.frames.window.frames可以一直这样下去的.alert(window.frames.window.frames.window.frames.window.frames);
      

  6.   


    但问题是你把它当有返回值使用了。你可以考虑把window对象过滤掉,目前想到的只有window对象会死循环。
    function dispObj(o) 
    {
    var s = ""; // .........return s;
    }sss.innerHTML=dispObj(window.frames);  
      

  7.   

    我按各位以上所说去修改,还是undefined. 所以限制递归深度的语句也不能验证.
    <div id=sss>0</div><script>var s = "";
    var i = 0;function dispObj(o)
    {
    if (i>=10)
    {
    return;
    }
    i++;
    s += "<table border=0 cellpadding=3 cellspacing=1 bgcolor='#7777f5'>"
    for (var e in o)
    {
    if (eval("o."+e)+"" == "[object]")
    {
    s += "<tr bgcolor='#AAAAf5'>";
    s += "<td colspan=2> "+e+" <br/>"+dispObj(eval("o."+e))+"</td>"
    } else
    {
    s += "<tr bgcolor='#AAAACC'>";
    s += "<td>"+e+"</td><td>"+eval("o."+e)+"</td>";
    }
    }
    s += "</tr></table>"
    }
    //dispObj(eval("o."+e))
    dispObj(window.frames);//document.write("dddddd"+s)
    sss.innerHTML=s;
    alert(window.frames.window.frames.window.frames.window.frames)
    </script>
      

  8.   

    eval("o."+e)改成 o[e] 反正是取对象的方法或属性吧, 输出null 
      

  9.   

    楼主一定是在firefox下测试的吧。
    IE下没有问题。sss.innerHTML = s;
    变更为
    document.getElementById("sss").innerHTML = s;就OK了。