美文网首页
实现call、apply、bind方法

实现call、apply、bind方法

作者: 怪兽难吃素 | 来源:发表于2020-08-13 15:59 被阅读0次
  Function.prototype.callPolyfill= function(){
  // 获取参数列表
  let args = [...arguments]
  // 获取要绑定的that
  let that = args[0] || window
  // 将原函数复制绑定当前的that
  that.fn = this
  // 执行复制绑定that后的函数
  const result = that.fn(...args.slice(1))
  // 解绑,防止破环that
  delete that.fn
  // 返回结果
  return result
}
Function.prototype.applyPolyfill = function(){
  // 获取参数列表
  let args = [...arguments]
  // 获取要绑定的that
  let that = args[0] || window
  // 将原函数复制绑定当前的that
  that.fn = this
  // 执行复制绑定that后的函数
  args[1] = args[1] || []
  const result = that.fn(...args[1])
  // 解绑,防止破环that
  delete that.fn
  // 返回结果
  return result
}
Function.prototype.bindPolyfill= function(){
  // 获取参数列表
  let args = [...arguments]
  // 获取要绑定的that
  let that = args[0] || window
  let targetThis = this
  return function(){
    // 将原函数复制绑定到当前的that
    that.fn = targetThis
    const result = that.fn(...args.slice(1),...arguments)
    // 解绑,防止破环that
    delete that.fn
    // 返回结果
    return result
  }
}

相关文章

网友评论

      本文标题:实现call、apply、bind方法

      本文链接:https://www.haomeiwen.com/subject/oxxidktx.html