zoukankan      html  css  js  c++  java
  • caller、call、apply、callee的用法和意思

    caller:返回被其他函数的引用,简单来说就是 我被谁给用了

    call:把别人的方法附加到自己的身上,简单来说就是我把某个对象的方法,用在了自己身上

    apply:和call的作用类似

    callee:返回对自身的引用

     1 // caller 、call、applay、callee
     2 
     3     /*
     4         caller
     5 
     6         Function 对象的caller属性,属性会返回一个调用该函数对象的外层函数引用。
     7 
     8     */
     9     function A(){
    10             return A.caller;
    11         }
    12     function B(){
    13         return A();
    14     }
    15     //调用B()
    16     alert(B());
    17     /*
    18         输出内容
    19         function A(){
    20             return A.caller;
    21         }
    22     */
    23     //当我们在全局调用A()的时候(也就是说,它没有任何外层函数)A.caller的值为null
    24     alert(A());
    25     /*
    26         输出内容 
    27         null
    28     */
    29 
    30 
    31     /*
    32         call和applay
    33 
    34         让当前对象去借用其他对象中得方法,为自己所用。
    35     */
    36     var some_obj={
    37         name:'小明',
    38         say:function(who){
    39             return '我的名字是'+who+', 我是'+this.name;
    40         }
    41     }
    42 
    43     console.log(some_obj.say('黄晓明'));
    44    /*
    45         输出 我的名字是黄晓明, 我是小明
    46    */
    47    var my_obj={
    48         name:'小鸡',
    49    }
    50 
    51    // var sayMsg=some_obj.say.call(my_obj,'山鸡');
    52    // console.log(sayMsg);
    53    /*
    54         输出 我的名字是山鸡, 我是小鸡
    55    */
    56 
    57 
    58 
    59    /*
    60         apply 用法和call类似,第二个参数为数组形式
    61    */
    62    var sayMsg=some_obj.say.apply(my_obj,['山鸡']);
    63    console.log(sayMsg);
    64    /*
    65         输出为  我的名字是山鸡, 我是小鸡
    66    */
    67 
    68    /*
    69         callee
    70 
    71         arguments上的属性(arguments.callee)
    72 
    73         该函数在被调用时候返回对自身的引用
    74    */
    75    function f(){
    76            return arguments.callee;
    77    }
    78    console.log(f());
    79    /*
    80         输出 为
    81 
    82         function f(){
    83            return arguments.callee;
    84            }
    85    */
    86    /*
    87         用arguments.callee实现匿名函数的递归操作
    88    */
    89    (function(count){
    90            if(count<5){
    91                console.log(count);
    92                count+=1
    93                //自己调用自己
    94                arguments.callee(count);
    95            }
    96    })(1);
  • 相关阅读:
    基于ZooKeeper和Thrift构建动态RPC调用
    菜鸡的Java笔记 api 文档
    菜鸡的Java笔记 第二十四
    菜鸡的Java笔记 第二十三
    菜鸡的Java笔记 第二十二
    菜鸡的Java笔记 实践
    Python 函数 参数传递
    python 函数的定义及调用语法,map 方法,函数嵌套递归
    java关键字
    菜鸡的Java笔记 第二十一 final 关键字
  • 原文地址:https://www.cnblogs.com/ollie-sk8/p/4360459.html
Copyright © 2011-2022 走看看