手写 call

2024-04-17 14:02:27

call 方法用于调用一个函数,并指定该函数的 this 值和参数。

myCall.js
test.js
          Function.prototype.myCall = function (ctx, ...args) {
  ctx = ctx === null || ctx === undefined ? globalThis : new Object(ctx)
  const key = Symbol('fn')
  Object.defineProperty(ctx, key, {
    enumerable: false,
    value: this
  })
  const result = ctx[key](...args)
  delete ctx[key]
  return result
}

        
          // 测试
const obj = {
  test(a, b) {
    console.log(this)
    return a + b
  }
}

obj.test.myCall(obj, 1, 2)