和马保国一起玩转 call和apply

本文详细介绍了JavaScript中call和apply方法的使用,重点在于它们如何改变函数内的this指向。通过实例展示了两者在传参方式上的区别:call接受多个参数,apply接收一个参数数组。并用MaBaoGuo和AoLiGei两个对象作为示例,演示了如何在不同上下文中调用函数,解释了当this指向改变时函数执行结果的变化。
摘要由CSDN通过智能技术生成

call和apply
相同点:改变 函数 中的this指向。
不同点:传参方式不同,target.call(source,param1,param2,…)
target.apply(source,[param1,param2,…])

let MaBaoGuo = {
    skill: '一鞭,二鞭,三鞭,四鞭,五鞭,收!',
    word: '啊!我大意了,没有闪!',
    wuLianBian: function () {
        return "给大家展示,看好喽!" + this.skill+this.word;
    },
    Boxing : function (skill,word) {
        return this.word+"我是老同志,我会" + skill+word;
    },
}
let AoLiGei = {
    word: '年轻人,耗子尾汁!'
}

//正常执行
MaBaoGuo.wuLianBian() //给大家展示,看好喽!一鞭,二鞭,三鞭,四鞭,五鞭,收!啊!我大意了,没有闪!

//将函数MaBaoGuo.wuLianBian中的this指向变更为默认,window,因为window并无这两个属性,所以打印均为undefined 
    console.log(MaBaoGuo.wuLianBian.call());      //给大家展示,看好喽!undefinedundefined   
    
    //将MaBaoGuo.wuLianBian中的this指向AoLiGei,AoLiGei中没有skill。则只有年轻人,耗子尾汁!
    console.log(MaBaoGuo.wuLianBian.call(AoLiGei)); //给大家展示,看好喽!undefined年轻人,耗子尾汁!

    // this指向AoLiGei,且向方法内传参
    console.log(MaBaoGuo.Boxing.call(AoLiGei,"混元意形拳!","年轻人,不讲武德!")); //年轻人,耗子尾汁!我是老同志,我会混元意形拳!年轻人,不讲武德!
    console.log(MaBaoGuo.Boxing.apply(AoLiGei,["混元意形拳!","年轻人,不讲武德!"]));//年轻人,耗子尾汁!我是老同志,我会混元意形拳!年轻人,不讲武德!
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值