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