刷面试题,很大概率会碰到一个问题就是对call,apply的理解以及自己实现call的方法
这总东西自己也看了很多,各种手写代码也收藏了不少,但是要自己去说说怎么理解的,我还真说不出来,其实就是自己对这个过程还不太理解,那可不就是说不出来吗,过段时间就忘了。
其实,call或者apply,这两个方法的作用就是改变函数中this的指向,并写这个方法立即执行了。一般用在某个对象不存在一个方法,又不想自己去实现,就可以去借用其他的对象的这个方法,并且将人家方法里面的this变成自己,这,不就是白嫖吗,还有这么好的事,没错,call就可以实现这个梦想。
那么自己实现这个方法就简单了,把步骤分解开
1,执行这个借用的函数
2,改变这个函数里面的this指向
用一个最简单的写法就是下面这样:
Fucntion.prototype.myCall=function(context){
if(typeof this !== 'function'){
throw new Error()
return
}
context.fn=this;
var arbs=[...arguments].slice(1);
var result = context.fn(...args);
delete context.fn;
return result
}
思路就是这样,不过呢,我这个还是写的不够好,后面看了人家写的,感觉会更严谨
apply的思路和上面的一样。