通过arguments属性,函数可以处理可变数量的参数。arguments对象的length属性包含了传递给函数的参数的数目。

解决方案 »

  1.   

    我是这样理解的,不知道对不对。
    sendMessage参数中包含{},就是一个数组如果把代码改为:
    <script language="javascript">
    function sendMessage(msg, obj) {
        if ( arguments.length ==2)
            alert(obj.aaa);
        else
            alert ( msg );
    }sendMessage ( "How are you?", {
        aaa:"dd"
    });
    </script>
    结果是会输出 dd
      

  2.   

    我js也初学,我的理解:function sendMessage(msg, obj) {//定义个函数
        if ( arguments.length ==2)//如果传递的参数个数等于2
            obj.handleMsg (msg);
        else                     
            alert ( msg );
    }
    sendMessage( "How are you?", 
    //How are you?既是msg值,因为传递了两个参数,所以执行obj.handleMsg (msg);也就是下面的函数:
      {
        handleMsg: function (msg) 
           {
              alert ( "This is a custom message: " + msg );
           }
       }
    );
      

  3.   

    谢谢两位的回答。正在学习jquery所以有些疑问。
      

  4.   

    {}是对象直接量,定义一个对象sendMessage ( "How are you?", {
        handleMsg: function (msg) {
            alert ( "This is a custom message: " + msg );
        }
    });
    其中
    {
        handleMsg: function (msg) {
            alert ( "This is a custom message: " + msg );
        }
    }
    定义了一个对象,对象里面有一个属性,handleMsg,这个属性是个函数,
    可以用 obj. handleMsg() 调用此方法
      

  5.   

    我个人理解:该段代码大致意思是通过判断参数的个数,显示不同内容的提示框。在调用sendMessage方法时,直接将一段function作为参数传递给方法,在sendMessage方法中,将它作为对象处理,通过对象调用handleMsg方法。<script language="javascript">
    function sendMessage(msg, obj) {
        if ( arguments.length ==2)
            obj.handleMsg (msg);
        else
            alert ( msg );
    }sendMessage ( "How are you?", {
        handleMsg: function (msg) {
            alert ( "This is a custom message: " + msg );
        }
    });
    </script>
      

  6.   

    <script language="javascript">
    function sendMessage(msg, obj) {
        if ( arguments.length ==2){//如果参数的长度为2
            obj.handleMsg (msg);//调用obj参数里的handleMsg方法, 此方法的参数是msg
        }else { //如果参数的长度不为2
            alert ( msg );//alert(msg参数) 如msg是"How are you?" 
        }
    }sendMessage ( "How are you?", 
        {handleMsg: function (msg) {alert ( "This is a custom message: " + msg );}//在这里obj实际上是个长度为1的json对象
    //它里面包含一个key值, 记handleMsg, 这个key值想对应的value是一个函数function(msg){alert(...)}
    //这个function需要传如一个参数, 而这个参数根据sendMessage的定义, 是sendMessage的第一个参数,记"How are you?"字符串
    });
    </script>希望清楚一点了..
      

  7.   

    近几年,对象直接量经常应用到,他的好处很多,你的例子是参数传递,我就说一个参数传递的例子吧,参数用对象直接量传递在jquery中也大量用到,function sendMessage(obj) {
         if(!obj.name)
         {
              obj.name="default";
         }
         if(! obj.message)
        {
            obj.message="default message";
         }
         if(! obj.handleMsg)
         {
             alert("this is a message to "+ obj.name );
         }
         else
        {
             obj.handleMsg();  
         }
    }sendMessage ({
        message: "how are you",
        name:  "hzrui",
        handleMsg: function (msg) {
            alert (this.message + this.name );
        }
    });你可以从上面的例子看出用对象作为参数的好处
      

  8.   

    <script language="javascript"> 
    //javascript中也有对象的概念,并且对象可以有属性,和函数;
    //它们都通过一个引用来供外界调用,这里obj是一个对象,obj.handleMSg代表引用对象中的handleMsg函数。
    //arguments是一个javascript函数自带的参数,用来记录传给当前函数的参数数量,sendMessage函数可以接收
    //两个参数,这里首先判断是否传递了两个参数,如果两个参数就调用参数obj的handleMsg函数.
    function sendMessage(msg, obj) { 
        if ( arguments.length ==2){//如果参数的长度为2 
            obj.handleMsg (msg);//调用obj参数里的handleMsg方法, 此方法的参数是msg 
        }else { //如果参数的长度不为2 
            alert ( msg );//alert(msg参数) 如msg是"How are you?" 
        } 

    //{}在javascript中就好像java的new来构造一个对象,在sendMessage调用中通过构造一个新对象{name:value}
    //name就是函数的引用,这里为handleMsg;value可以是一个数值货对象,function(msg)被指定为新对象的
    //一个成员函数,其实现为弹出加工后的msg消息.这里会显示This is a custom message How are you?
    sendMessage ( "How are you?", 
        {handleMsg: function (msg) {alert ( "This is a custom message: " + msg );}
    }); 
    //而且javascript函数是弱类型的,可以接收少于声明的参数个数,如果这样调用,则直接弹出"How are you?"
    sendMessage("How ar you?");
    </script> 希望清楚一点了..