JS基础 之 callee caller call apply 及 自定义回调函数

1.callee

//递归  
function add(x){  
    if(x == 1)   
        return 1;  
    else   
        //callee 返回正被执行的 Function 对象  
        return x + arguments.callee(x-1);  
}  
console.log(add(4));

2.caller 返回一个对函数的引用,该函数调用了当前函数

function fntestcaller(){  
    var a = fntestcaller.caller.name;  
    alert(a);  
}  
function handleCaller() {  
    fntestcaller();  
}  
handleCaller();

3.call apply

function fn1(){  
    this.name="fn1";  
    this.say=function(){  
        alert("say:"+this.name);  
    }  
}  
  
function fn2(a){  
    this.name="fn2";  
}  
  
var f1=new fn1();  
var f2=new fn2();  
//调用一个对象的一个方法,以另一个对象替换当前对象。   
//相当于f2也有了函数f1的say方法  
f1.say.call(f2);//结果alert(say:fn2)  
//应用某一对象的一个方法,用另一个对象替换当前对象。   
f1.say.apply(f2);//结果alert(say:fn2)  
//区别:传入的参数 不同  
/* 
 apply只有两个参数,第一个参数是要用来 
 “代替”这个function对象实例里面的this的对象,变量 
 而第二个参数是传递给这个function对象的所有参数组合而成的数组 
 call的第一个参数的含义和apply的完全一样,但是第二个以后的参数 
 则是传递给这个function对象的参数 
 */

4.将argument转换成数组

//把argument变成数组  
    var args = Array.prototype.slice.call(arguments, 0);

5.自定义回调函数

function fnTestCallBackFunc(bf){  
    bf.apply(this,[1]);  
    return this;  
}  
      
fnTestCallBackFunc(function(data){  
    alert(data);  
});

6.子窗口调用父窗口的方法,获取返回值,并以回调函数的形式将子窗口的值通过函数返回给父窗口




你可能感兴趣的:(JS基础 之 callee caller call apply 及 自定义回调函数)