JavaScript中的callee,caller,call,apply的使用

网上看到一个简单易懂的教程,贴出来分享。

 1 <script language="JavaScript">
 2 /*
 3  * 演示arguments的用法,如何获取实参数和形数数
 4  */
 5 function argTest(a,b,c,d){
 6     var numargs = arguments.length;     // 获取被传递参数的数值。
 7     var expargs = argTest.length;       // 获取期望参数的数值。
 8     alert("实参数目为:"+numargs)
 9     alert("形数数目为:"+expargs)
10 
11     alert(arguments[0])         
12     alert(argTest[0])          //undefined 没有这种用法
13 }
14 //argTest(1,2)
15 //argTest(1,2,3,4,5)
16 
17 /*
18  *  arguments不是数组(Array类)
19  */
20 
21 Array.prototype.selfvalue = 1;
22 function testAguments(){
23     alert("arguments.selfvalue="+arguments.selfvalue);
24 }
25 //alert("Array.sefvalue="+new Array().selfvalue);
26 //testAguments();
27 
28 
29 
30 
31 
32 /*
33  * 演示函数的caller属性.
34  * 说明:(当前函数).caller:返回一个对函数的引用,该函数调用了当前函数
35  */
36 
37 function callerDemo() {
38     if (callerDemo.caller) {
39         var a= callerDemo.caller.arguments[0];
40         alert(a);
41     } else {
42         alert("this is a top function");
43     }
44 }
45 function handleCaller() {
46     callerDemo();
47 }
48 
49 //callerDemo();
50 //handleCaller("参数1","参数2");
51 
52 
53 /*
54  * 演示函数的callee属性.
55  * 说明:arguments.callee:初始值就是正被执行的 Function 对象,用于匿名函数
56  */
57 function calleeDemo() {
58     alert(arguments.callee);
59 }
60 //calleeDemo();
61 //(function(arg0,arg1){alert("形数数目为:"+arguments.callee.length)})();
62 
63 
64 /*
65  * 演示apply,call函数的用法
66  * 说明:作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数方式有所区别:
67  *       apply(thisArg,argArray);
68  *     call(thisArg[,arg1,arg2…] ]);
69  *     即所有函数内部的this指针都会被赋值为thisArg
70  */
71 
72  function ObjectA(){
73     alert("执行ObjectA()");
74     alert(arguments[0]);
75     this.hit=function(msg){alert(msg)}
76     this.info="我来自ObjectA"
77  }
78  
79  function ObjectB(){
80     alert("执行ObjectB()");
81     //调用ObjectA()方法,同时ObjectA构造函数中的所有this就会被ObjectB中的this替代
82     ObjectA.apply(this,arguments);//ObjectA.call(this);
83     alert(this.info);
84  }
85  //ObjectB('参数0');
86 
87 
88  var value="global 变量";
89  function Obj(){
90     this.value="对象!";
91  }
92  function Fun1(){
93     alert(this.value);
94  }
95  //Fun1();
96  //Fun1.apply(window); 
97  //Fun1.apply(new Obj()); 
98 </script>
原文地址:https://www.cnblogs.com/SKLthegoodman/p/3521869.html