Javascript参数个数可变的函数 动态传人和取得参数

js中的函数是一个对象,一个Function对象(函数参数列表及函数主体事实上只是Function对象的构造函数的参数而已),跟其他对象一 样可以在运行时增加属性、删除属性,函数参数是可变的,比如定义函数时定义的参数列表只有3个参数,调用时你却可以只传2个参数,或超过3个参数,通过函 数对象的length属性可以得到函数定义的形参个数,而函数调用时的实际参数列表则可以通过函数的arguments属性(一个Arguments对 象,类似于数组)访问到,arguments.length就是实际参数的个数。

参数个数可变的函数,arguments的用法;   

动态函数: 

var square=new Function("x","y","var sum;sum=x*x+y*y;return sum;")alert(square(2,3));

动态函数的作用:函数体是由一个字符串构成的。

function ArgTest(a, b){
    var i, s = "The ArgTest function expected ";
    var numargs = arguments.length; // 获取被传递参数的数值。
    var expargs = ArgTest.length; // 获取期望参数的数值。
    if (expargs < 2)
        s += expargs + " argument. ";
    else
        s += expargs + " arguments. ";
    if (numargs < 2)
        s += numargs + " was passed.";
    else
        s += numargs + " were passed.";
    s += "/n/n"
    for (i =0 ; i < numargs; i++){ // 获取参数内容。
        s += " Arg " + i + " = " + arguments\[i\] + "/n";
    }
    return(s); // 返回参数列表。
}

  

------------------

自己实现的代码

------------------

function addrow(responseText)
{
   //alert(responseText);
   
   var jsontemp = eval('(' + responseText + ')');
   var length = jsontemp.root.length;
   
   var type = "";
   var id = "";
   var date = "";
   var sucOrf = "";
   
   if(length>0)
   {
    for(var i = 0; i<length; i++)
    {
     type = jsontemp.root\[i\].type;
     id = jsontemp.root\[i\].id;
     date = jsontemp.root\[i\].date;
     sucOrf = jsontemp.root\[i\].sucOrf;
     
     addDivArgs(type,render(renderType,type),id,"",date,"",sucOrf,render(renderSucOrf,sucOrf));
     //addDiv(type,id,date,sucOrf);   
    }
   }
   else
   {
   return;
   }
   
   backcount = backcount+length;
   
   if(backcount>=2000)//当记录大于xxx条时重新加载页面
   {
   window.location.reload();
   //window.location.href="addrow.html";
   return;
   }
   
   container.scrollTop = container.scrollHeight;
}
 
function render(renderFunction,value)
{
   return renderFunction(value);
}
 
function renderSucOrf(value)
{
   if(value=="成功")
   {
    return "div3 success";
   }
   else
   {
    return "div3 false";
   }  
}
 
function renderType(value)
{
   if(value=="委托")
   {
    return "div0 success";
   }
   else
   {
    return "div0 false";
   }  
}

//插入div
//传入可变参数的函数

var numargs = 0;
var tmpDiv = null;
var defaultClass = new Array("div0","div1","div2","div3");//默认样式数组

//动态传入列的值和渲染方法处理后返回的样式,样式为空采用默认的样式

function addDivArgs(value,render)
{
   numargs = arguments.length; // 获取被传递参数的数值
   tmpDiv = document.createElement("div");
   tmpDiv.className = "divline";
   
   for(var i = 0; i < numargs; i+=2)//每列传入两个参数
   {
    tempDivId = document.createElement("div");
       
   if(arguments\[i+1\]=="")//每列的第二个参数为空
    {
     tempDivId.className = defaultClass\[i*(1/2)\];
    }
    else
    {
     tempDivId.className = arguments\[i+1\];
    }
    
    tmpDiv.appendChild(tempDivId);
    
    tempText = document.createTextNode(arguments\[i\]);
    tempDivId.appendChild(tempText);   
   }
   container.appendChild(tmpDiv);
}