js知识:call,apply,bind

call,apply,bind改变this指向

案例:
龙龙的某云音乐自动续费某胶vip,在某云上听了许多vip专属音乐
这时候他的好朋友聪聪,也想听vip音乐,但是不想开通某胶vip,于是找龙龙借了账号密码,听了几首vip专属音乐

/* 
创建一个对象
	姓名:龙龙
	听过的音乐:看我72变,爱的主打歌
	有一个自动续费的某胶vip:可以听vip歌曲
*/
const p1 = {
    name:'龙龙',
    music:['看我72变','爱的主打歌'],
    listenMusicVIP(music1,music2){
        console.log(`使用 ${p1.name} 的某胶vip听了vip歌曲,${music1},和${music2}`);
        this.music.push(music1,music2);
    }
};

console.log(`${p1.name}听过的vip歌曲有:${p1.music}`);
p1.listenMusicVIP('就是我','假如');
console.log(`${p1.name}听过的vip歌曲有:${p1.music}`);

console.log('=================== 分割线 ===================')

/* 
创建另一个对象
	姓名:聪聪
	听过的音乐:光辉岁月
*/
const p2 = {
    name:'聪聪',
    music:['光辉岁月'],
};
console.log(`${p2.name}听过的vip歌曲有:${p2.music}`);
p1.charg.call(p2,'夜照亮了夜','单恋一枝花'); 
// p1.charg.apply(p2,['夜照亮了夜','单恋一枝花']);
// let f = p1.listenMusicVIP.bind(p2);
// f('夜照亮了夜','单恋一枝花');	
console.log(`${p2.name}听过的vip歌曲有:${p2.music}`);

总结:

简单理解:this总是指向最终调用它的对象,也就是看它执行的时候是谁调用的

当我们需要使用在一个对象中使用其它对象里面的东西时候

就可以通过call,apply,bind来改变this的指向

** call,apply,bind的区别:**

  1. call(context,param1,param2,param3…)。接收多个参数,第一个为要指向的上下文,后面依次传入的实参
  2. apply(context,params[])。接收多个参数,第一个为要指向的上下文,第二个为多个实参组成的数组
  3. bind()。需要传入新的上下文,返回一个函数,可以在后面调用调用该函数(我借了vip,就不听,就玩儿)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值