apply

371 阅读1分钟

apply说明

apply也是函数的一个方法,用法类似于call,

apply用来改变函数内部this指向,第二个参数是数组或者类数组的集合,虽然是以一个集合的形式传进去的,但是函数接收时还是一个散乱的

举例说明

function fn(){
    console.log([...arguments]);
    console.log(this);
    console.log('-----0v0-------');
}
var obj = {
    a:12,
    b:13
}
fn.call(obj,4,5,6,7);
fn.apply(obj,[5,6,7,8]);

手写一个myApply()

Function.prototype.myApply = function(context,arg){
    //this 就是fn 
    let a = Symbol();//产生一个唯一不重复的值
    arg = arg || [];
    context = context || window;
    context[a] = this;//a是一个变量,所以只能用[]去取值,this就是fn
    let res = context[a](...arg);//让fn 执行
    delete context[a];
    return res;
}
fn.myApply(obj,[1,2,3,4);

输出结果: