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);

 

posted @ 2015-03-23 17:23  ollie_sk8  阅读(342)  评论(0编辑  收藏  举报