zoukankan      html  css  js  c++  java
  • 全面理解javascript的caller,callee,call,apply概念

    转载:
    <script language="JavaScript">
    /*
     * 演示arguments的用法,如何获取实参数和形数数
     
    */

    function argTest(a,b,c,d){
        
    var numargs = arguments.length;     // 获取被传递参数的数值。
        var expargs = argTest.length;       // 获取期望参数的数值。
        alert("实参数目为:"+numargs)
        alert(
    "形数数目为:"+expargs)

        alert(arguments[
    0])         
        alert(argTest[
    0])          //undefined 没有这种用法
    }

    //argTest(1,2)
    //
    argTest(1,2,3,4,5)

    /*
     *  arguments不是数组(Array类)
     
    */


    Array.prototype.selfvalue 
    = 1;
    function testAguments(){
        alert(
    "arguments.selfvalue="+arguments.selfvalue);
    }

    //alert("Array.sefvalue="+new Array().selfvalue);
    //
    testAguments();





    /*
     * 演示函数的caller属性.
     * 说明:(当前函数).caller:返回一个对函数的引用,该函数调用了当前函数
     
    */


    function callerDemo() {
        
    if (callerDemo.caller) {
            
    var a= callerDemo.caller.arguments[0];
            alert(a);
        }
     else {
            alert(
    "this is a top function");
        }

    }

    function handleCaller() {
        callerDemo();
    }


    //callerDemo();
    //
    handleCaller("参数1","参数2");


    /*
     * 演示函数的callee属性.
     * 说明:arguments.callee:初始值就是正被执行的 Function 对象,用于匿名函数
     
    */

    function calleeDemo() {
        alert(arguments.callee);
    }

    //calleeDemo();
    //
    (function(arg0,arg1){alert("形数数目为:"+arguments.callee.length)})();


    /*
     * 演示apply,call函数的用法
     * 说明:作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数方式有所区别:
     *       apply(thisArg,argArray);
     *     call(thisArg[,arg1,arg2…] ]);
     *     即所有函数内部的this指针都会被赋值为thisArg
     
    */


     
    function ObjectA(){
        alert(
    "执行ObjectA()");
        alert(arguments[
    0]);
        
    this.hit=function(msg){alert(msg)}
        
    this.info="我来自ObjectA"
     }

     
     
    function ObjectB(){
        alert(
    "执行ObjectB()");
        
    //调用ObjectA()方法,同时ObjectA构造函数中的所有this就会被ObjectB中的this替代
        ObjectA.apply(this,arguments);//ObjectA.call(this);
        alert(this.info);
     }

     
    //ObjectB('参数0');


     
    var value="global 变量";
     
    function Obj(){
        
    this.value="对象!";
     }

     
    function Fun1(){
        alert(
    this.value);
     }

     
    //Fun1();
     //Fun1.apply(window); 
     //Fun1.apply(new Obj()); 
    </script>
  • 相关阅读:
    HTTP 错误 404.2
    SQL Server 2008 R2如何开启数据库的远程连接(转)
    CSS中font-family:中文字体对应的英文名称
    15/18位身份证号码正则表达式(详细版)
    C#获取系统时间及时间格式
    C#正则表达式判断输入日期格式是否正确
    Linux查看机器负载
    模拟HTTP请求超时时间设置
    MySQL show命令的用法
    innodb事务隔离级别
  • 原文地址:https://www.cnblogs.com/yuzhongwusan/p/2224836.html
Copyright © 2011-2022 走看看