【JS面试题】call - apply - bind

推荐哔站一个老师的视频讲解,非常详细易懂,5分钟学会!前端面试题:call、apply、bind的基本概念

这三个都是函数的方法,用来改变函数中的this指向!

关于call的使用:(3个方法类似,学习call,总结区别即可)

① 调用不需要传参数的函数( fun.call(cat); )

// 定义一个fun函数
function fun(){
    console.log(this.name);
}
// 定义一个cat对象
let cat = {
    name: '喵喵'
}
// call可以调用函数,call可以改变函数中的this指向
// 参数cat表示想要fun函数的this指向哪个对象,这里指向cat对象
fun.call(cat);  // 输出:喵喵

② 调用需要传递参数的函数 ( dog.eat.call(cat,'鱼','肉'); )

// 定义一个dog对象
let dog = {
    name: '汪汪',
    eat(food1,food2){
        console.log('我喜欢吃'+food1+food2);
    }
}
// 定义一个cat对象
let cat = {
    name: '喵喵'
}

// 直接调用eat函数
dog.eat('骨头','汤');  // 输出:我喜欢吃骨头汤

// 使用call调用函数,改变this指向,指向cat
// 第一个参数cat表示:想要函数eat的this指向cat对象;
// 之后的参数表示:eat函数需要传递的参数
dog.eat.call(cat,'鱼','肉');  // 输出:我喜欢吃鱼肉

总结:

call 和 apply 和 bind,用来改变函数的this指向;

三者的区别:

① call

dog.eat.call(cat,'鱼','肉');

② apply

dog.eat.apply(cat,['鱼','肉']); // 参数传递的方式不一样,apply需要以数组的方式进行传递

③ bind

let fun = dog.eat.bind(cat,'鱼','肉'); //  bind不会自动调用eat函数,需要手动调用

fun();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值