美文网首页
call原理+封装一个call

call原理+封装一个call

作者: 广告位招租 | 来源:发表于2019-03-21 12:12 被阅读0次

call

首先需要了解一下call的使用方法

let obj = {
  name: 'zhangsan'
}

function a() {
  console.log(this)
  console.log(this.name)
}
a.call(obj)
image.png

this指向了obj,所以我们需要做的是,改变一下this的指向

封装一个call

Function.prototype._call = function(...arg) {
  let _one = [...arg][0]
  _one.fn = this // 注意,这里的this指向的是调用_call的函数
   let result = _one.fn(...[...arg].slice(1)) // 将后续的参数传入函数,在这一步实现了this指向传入的第一个参数
  delete _one.fn // 别忘了删掉增加的属性
  return result
}
function a(...args) {
  console.log(this.name)
  console.log(...args)
}
a._call(obj, 1, 2)
image.png

这里要注意this之间的转变,开始的this指向的是调用call的方法,但是之后执行方法的时候,this将会指向传入的对象,实现call方法

相关文章

网友评论

      本文标题:call原理+封装一个call

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