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

 

你可能感兴趣的:(apply)