caller、call、apply、callee的用法和意思

caller:返回被其餘函數的引用,簡單來講就是 我被誰給用了數組

call:把別人的方法附加到本身的身上,簡單來講就是我把某個對象的方法,用在了本身身上app

apply:和call的做用相似函數

callee:返回對自身的引用this

 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);
相關文章
相關標籤/搜索