call 函数实现

  • 将函数引用到对象里

  • 调用函数

  • 删除对象里的函数
Function.prototype.call1 = function (context) {
  context.fn = this // this 指向实例
  context.fn()
  delete context.fn
}

// 测试:
const obj = {
  value: 'muyy',
}

function testCall() {
  console.log(this.value)
}

const resultCall = testCall.call1(obj) // muyy

传入参数的实现

Function.prototype.call2 = function (context) {
  const arr = Array.prototype.slice.call(arguments, 1)

  context.fn = this // this 指向实例
  context.fn(...arr)
  delete context.fn
}

// 测试:
const obj2 = {
  value: 'muyy',
}

function testCall2(age) {
  console.log(this.value, age) // muyy 23
}

const resultCall = testCall2.call2(obj2, 23)