开发者社区 问答 正文

手写call函数?

展开
收起
前端问答 2019-11-24 20:11:31 842 分享
分享
版权
举报
1 条回答
写回答
取消 提交回答
  • 前端问答小助手

    首先从以下几点来考虑如何实现这几个函数

    不传入第一个参数,那么上下文默认为 window 改变了 this 指向,让新的对象可以执行该函数,并能接受参数 那么我们先来实现 call

    Function.prototype.myCall = function(context) {
      if (typeof this !== 'function') {
        throw new TypeError('Error')
      }
      context = context || window
      context.fn = this
      const args = [...arguments].slice(1)
      const result = context.fn(...args)
      delete context.fn
      return result
    }
    
    

    以下是对实现的分析:

    • 首先 context 为可选参数,如果不传的话默认上下文为 window
    • 接下来给 context 创建一个 fn 属性,并将值设置为需要调用的函数
    • 因为 call 可以传入多个参数作为调用函数的参数,所以需要将参数剥离出来
    • 然后调用函数并将对象上的函数删除
    2019-12-17 07:44:03 举报
    赞同 1 评论

    评论

    全部评论 (0)

    登录后可评论
问答分类:
问答地址:
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等