zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    bzoj1005: [HNOI2008]明明的烦恼(prufer+高精度)
    bzoj1211: [HNOI2004]树的计数(prufer序列+组合数学)
    bzoj1430: 小猴打架(prufer序列)
    bzoj1029: [JSOI2007]建筑抢修(堆+贪心)
    bzoj1053: [HAOI2007]反素数ant
    [HNOI2012]双十字
    [HNOI2012]矿场搭建
    [HNOI2012]集合选数
    [HNOI2013]消毒
    POJ2449 Remmarguts' Date
  • 原文地址:https://www.cnblogs.com/SKLthegoodman/p/3521869.html
Copyright © 2011-2022 走看看