面试官:bind、call、apply 区别?如何实现一个bind?
一、作用
call、apply、bind作用是改变函数执行时的上下文,简而言之就是改变函数运行时的th
is指向
那么什么情况下需要改变this的指向呢?下面举个例子
var name = "lucy";
var obj = {
name: "martin",
say: function () {
console.log(this.name);
}
};
obj.say(); // martin
,
this
指向
obj
对象
setTimeout(obj.say,0); // lucy
,
this
指向
window
对象
从上面可以看到,正常情况say方法输出martin
但是我们把say放在setTimeout方法中,在定时器中是作为回调函数来执行的,因此回到
主栈执行时是在全局执行上下文的环境中执行的,这时候this指向window,所以输出luc
y
我们实际需要的是this指向obj对象,这时候就需要该改变this指向了
setTimeout(obj.say.bind(obj),0); //martin
,
this
指向
obj
对象