手写bind/call

本文深入探讨了JavaScript中`bind`和`call`函数的作用,它们都用于改变函数调用时的`this`指向。`bind`返回一个新的函数,保留原函数体并预设`this`值和额外参数;`call`则直接调用函数,传入指定的`this`值及参数。通过示例展示了如何使用这两个方法来定制函数的上下文和参数。
摘要由CSDN通过智能技术生成
  /*
  bind函数的作用
  1. 改变this的指向
  2. 返回bind函数需要被改变this指向的函数(this为bind方法的第一个参数)
  3. 传入剩余参数
  */
 let obj = {
    name: 'wl'
  }
  function sayName(a, b) {
    console.log(this.name);
    console.log(a);
    console.log(b);
  }
  Function.prototype.myBind = function () {
    let args = Array.from(arguments)//获取参数合集,arguments是类数组,需要转换为数组
    let context = args.shift()//获取第一个参数this
   let  self = this//拿到调用时的函数此时为this
    return function(){//返回新的函数调用
      return  self.apply(context,args)
    }
  }
  let fn = sayName.bind(obj, 1, 2)
  let fn2 = sayName.myBind(obj, 1, 2)
  fn()
  fn2()
  let obj = {
    name: 'wl'
  }
  function sayName(a, b) {
    console.log(this.name);
    console.log(a);
    console.log(b);
  }
  /*
 call函数的作用
  1. 改变this的指向
  2. 传入剩余参数
  3. 返回调用后改变this指向的函数调用结果
 
  */
  Function.prototype.myCall = function () {
    let args = Array.from(arguments)//获取参数合集,arguments是类数组,需要转换为数组
    let context = args.shift()//获取第一个参数this
    context.self = this// 在this中绑定需要调用函数的方法,利用this的特性,点语法的this指向为点语法前那一位
    let result  = context.self(...args)//在this中调用需要修改this指向的函数,并传入剩余参数
    delete context.self//删除多余调用函数
    return result//返回调用结果
  }
  sayName.call({name:'xc1'}, 1, 2)
 sayName.myCall({name:'xc1'}, 1, 2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值