var ymPrompt = {};var initFn = ['getPage', 'resizeWin', 'doHandler', 'close', 'setDefaultCfg','show'], _initFn = {}, t;

while(t=initFn.shift()) 
{
    ymPrompt[t] = eval('0,function(){_initFn.'+t+'=arguments}');
}你们能看懂该段代码中的 eval()函数嘛? 该函数返回的是什么?

解决方案 »

  1.   

    http://blog.csdn.net/aimingoo/archive/2008/07/22/2692512.aspx
      

  2.   


    var ymPrompt = {};var initFn = ['getPage', 'resizeWin', 'doHandler', 'close', 'setDefaultCfg','show'], _initFn = {}, t;
        
    while(t=initFn.shift()) 
    {
        ymPrompt[t] = eval('0,function(){_initFn.'+t+'=arguments}'); //对ymPrompt进行赋值
    }
    for( method in ymPrompt){
    alert('ymPrompt.'+method+'='+ymPrompt[method]); //查看赋值结果。
    }
    ymPrompt.getPage('a','b');         //调用ymPrompt的getPage()方法,实际上就是对_initFn.getPage属性进行赋值。
    alert((_initFn.getPage)[0]);
    alert((_initFn.getPage)[1]);
      

  3.   

    楼上的谢谢您的解答,说的很好,我也懂得了该代码的用意。但是有一点就是不明白:为什么 eval()函数中有这个逗号表达式,而且前面的0是什么用意?
      

  4.   

    eval()中是传入一个参数为一个串
    0,应该是个标示符,表示一个参数
    后面的function()估计是将这个结果传给0,
    然后eval中使用这个结果
      

  5.   


    把function()是将这个结果传给0?哥们,你说的这个是什么意思啊,我还是听不懂
      

  6.   

    var a=eval(0,3)//相当于var a=0,3
    alert(a)//弹出0
      

  7.   

    不好意思 我在11楼那说错了 
    下面的代码 在ff下能弹出 ie不行  解释的是eval的第2个参数 转自http://www.javaeye.com/topic/210416
    var ttt={   
    aaa:123,   
    bbb:234  
    }   
      
    with(ttt)   
    {   
    ccc=aaa;   
    }   
      
      
    //eval("ccc=aaa",ttt)   
    alert(ccc)  
    var ttt={   
    aaa:123,   
    bbb:234  
    }   
      
    eval("ccc=aaa",ttt)   
    alert(ccc)  下面这个应该是对的 
    var a=eval('0,3')//等同于var a=(0,3)
    alert(a)//弹出3
      

  8.   

    哦  我明白了
    首先
    var a=eval('function(){return 33}')//ie下不行 ,ff下相当于var a=function(){return 33}
    alert(a)//ie下弹出undefined  ff下能正确弹出function(){return 33} 但是下面这样 ie下也行
    var a=eval('0,function(){return 33}')//
    alert(a)//你会发现ie,ff下都能正确弹出function(){return 33} 所以 加一个0, 是为了兼容ie为什么不直接用 ymPrompt[t] = function(){_initFn.t=arguments};
    而要用 ymPrompt[t] = eval('0,function(){_initFn.'+t+'=arguments}');呢?
    看这个帖子http://topic.csdn.net/u/20090313/22/37717fa8-74bf-4317-a13e-b4e284d4e6a2.html
    并注意6楼和8楼的发言 
      

  9.   

    这里有爱民大哥的 研究
    http://blog.csdn.net/aimingoo/archive/2008/07/22/2692512.aspx