主页 个人前端笔记 应用于Function对象的函数,对象使用介绍
admin
发表于2012-11-11 18:53:47    只看楼主 楼主
头衔:  精益求精
注册时间: 2012-10-07
用户组: 日常管理组
发帖数:  502
金币数:  186
短消息
1、arguments对象

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">   
<html>   
<head>   
<script language="JavaScript">   
<!--   
  
function argTest(a,b,c,d){   
     var numargs = arguments.length;    //2
     // 获取被传递参数的数值。   
     var expargs = argTest.length;      //4
     // 获取期望参数的数值。   
      alert("实参数目为:"+numargs);      
      alert("形数数目为:"+expargs);   
      alert(arguments[0]);             //1
      alert(argTest[0]);               //undefined 没有这种用法   
}   
  
   argTest(1,2);   
//-->   
</script>   
</head>   
<body></body>   
</html>   
 
admin
发表于2012-11-11 18:54:02 1楼
头衔:  精益求精
注册时间: 2012-10-07
用户组: 日常管理组
发帖数:  502
金币数:  186
短消息
2、arguments不是数组(Array类)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">   
<html>   
<head>   
<script language="JavaScript">   
<!--   
  
Array.prototype.selfvalue = 1;   
function testAguments(){   
     alert("arguments.selfvalue=" + arguments.selfvalue);   
}   
  
alert("Array.sefvalue=" + new Array().selfvalue);//打印 "Array.sefvalue=1"   
  
testAguments();//打印 "arguments.selfvalue=undefined"   
//-->   
</script>   
</head>   
<body>   
</body>   
</html>   
将JavaScript 函数内的arguments 对象转换为数组
第一种方法
(function() {
    var slice = Array.prototype.slice,
        aArguments = slice.apply(arguments);
})(10, 20, 30);

第二种方法
(function() {
    var aArguments = [].slice.apply(arguments);
})(10, 20, 30);
 
admin
发表于2012-11-11 18:54:14 2楼
头衔:  精益求精
注册时间: 2012-10-07
用户组: 日常管理组
发帖数:  502
金币数:  186
短消息
3、演示函数的caller属性

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">   
<html>   
<head>   
<script language="JavaScript">   
<!--   
       
     function callerDemo() {   
        if (callerDemo.caller) {   
            var a= callerDemo.caller.arguments[0];   
             alert(a);   
         } else {   
             alert("this is a top function");   
         }   
     }   
       
    function handleCaller() {   
         callerDemo();   
     }   
       
     callerDemo(); //打印 "this is a top function"   
       
     handleCaller("参数1","参数2"); //打印 "参数1"   
//-->   
</script>   
</head>   
<body>   
</body>   
</html>  

 if (callerDemo.caller)如果为null,则表示callerDemo没被谁调用。
 
admin
发表于2012-11-11 18:54:26 3楼
头衔:  精益求精
注册时间: 2012-10-07
用户组: 日常管理组
发帖数:  502
金币数:  186
短消息
4、arguments.callee

可以使用 arguments.callee 属性来生成递归的匿名函数,如下所示:

factorial = function (x) {
  if (x <= 1) {
    return 1;
  } else {
    return x * arguments.callee(x-1);
  }
};
 
admin
发表于2012-11-11 18:54:41 4楼
头衔:  精益求精
注册时间: 2012-10-07
用户组: 日常管理组
发帖数:  502
金币数:  186
短消息
5、apply,call函数的用法

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">   
<html>   
<head>   
<script language="JavaScript">   
<!--   
       
        
     function ObjectA(){   
         console.log("执行ObjectA()");   
         console.log(arguments[0]);   
        this.hit=function(msg){console.log(msg)}   
        this.info="我来自ObjectA"   
      }   
        
     function ObjectB(){   
         console.log("执行ObjectB()");   
        //调用ObjectA()方法,同时ObjectA构造函数中的所有this就会被ObjectB中的this替代   
         ObjectA.apply(this,arguments);//ObjectA.call(this);   
         console.log(this.info);   
        this.hit("来自A的hit函数");   
     }   
       
       
      ObjectB('参数0');   
//-->   
</script>   
</head>   
<body>   
</body>   
</html>  

执行结果为:

执行ObjectB()
执行ObjectA()
参数0
我来自ObjectA
来自A的hit函数

回复人
回复内容

Powered BY YouYaX
个人自主开发论坛,从2010年10月份开发至今!

操作管理