作用
call、aply和bind都可以改变函数中的this指向。
用法
call:
function fn1(){
this.name = 'aaa';
}
function fn2(){
console.log(this)
}
//将fn2的this指向了fn1
fn2.call(fn1);
fn2()

可以看到输出结果,fn2的this已经改变了,变成了fn1,并且执行了fn2函数;但是,这只是暂时的,当再次执行fn2时,this还是window没变;
aply和bind同理。
区别
传参时:
call:
fn2.call(fn1,a,b,c);
aply:必须以数组的形式传入
fn2.apply(fn1,[a,b,c]);
bind:和call一样
使用时:
call和aply会自动执行函数,而bind不会执行函数,而且将函数返回
bind的应用场景:
一般用于不需要立即执行函数的时候,像是计时器之类的延迟执行的函数,其他两个看情况用
setTimeout(function(){
console.log(this)
}.bind(fn1),3000)
本文介绍了JavaScript中改变函数this指向的三种方法:call、apply和bind。通过示例展示了它们如何使用,以及它们在传参方式上的差异。特别强调了bind的特性,它不会立即执行函数,适合于需要延迟执行的情况,如setTimeout。
4831

被折叠的 条评论
为什么被折叠?



