• 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>
  • 相关阅读:
    day 66 crm(3) 自创组件stark界面展示数据
    day 65 crm(2) admin源码解析,以及简单的仿造admin组件
    用 Python+nginx+django 打造在线家庭影院
    django -admin 源码解析
    day 64 crm项目(1) admin组件的初识别以及应用
    云链接 接口不允许 情况 解决方法 mysql Host is not allowed to connect to this MySQL server解决方法
    day 56 linux的安装python3 ,虚拟环境,mysql ,redis
    day55 linux 基础以及系统优化
    Codeforces 989 P循环节01构造 ABCD连通块构造 思维对云遮月参考系坐标轴转换
    Codeforces 990 调和级数路灯贪心暴力 DFS生成树两子树差调水 GCD树连通块暴力
  • 原文地址:https://www.cnblogs.com/SKLthegoodman/p/3521869.html
Copyright © 2020-2023  润新知