call函数实现

call 函数的实现步骤:

  1. 判断调用对象是否为函数,即使我们是定义在函数的原型上的,但是可能出现使用 call 等方式调用的情况。

  2. 判断传入上下文对象是否存在,如果不存在,则设置为 window 。

  3. 处理传入的参数,截取第一个参数后的所有参数。

  4. 将函数作为上下文对象的一个属性。

  5. 使用上下文对象来调用这个方法,并保存返回结果。

  6. 删除刚才新增的属性。

  7. 返回结果。

javascript 复制代码
// call函数实现
Function.prototype.myCall = function(context) {
  // 判断调用对象
  if (typeof this !== "function") {
    console.error("type error");
  }
  // 获取参数
  let args = [...arguments].slice(1),
      result = null;
  // 判断 context 是否传入,如果未传入则设置为 window
  context = context || window;
  // 将调用函数设为对象的方法
  context.fn = this;
  // 调用函数
  result = context.fn(...args);
  // 将属性删除
  delete context.fn;
  return result;
};
相关推荐
程序员老赵2 分钟前
Docker 部署填鸭表单完整教程:搭建私有化问卷与表单收集平台
前端·docker·开源
重生之小比特8 分钟前
【Java SE】抽象类和接口
java·开发语言
Lyyaoo.11 分钟前
【设计模型】策略模式
java
无限压榨切图仔18 分钟前
向量库能搜到内容,为什么还不算学会 RAG
前端·agent
mmsx18 分钟前
MapLibre 实战 11|用户说"我的地块丢了":一个 sealed class 图层模型,和四个让我重构三版的坑
android·前端·开源
xqchen21 分钟前
代码差异可视化方案选型:diff2html 实战指南
前端
譕痕21 分钟前
Idea 集成 智能体开发工具“千问(qwen)”
java·ide·spring·语言模型
名字还没想好☜22 分钟前
用 Zustand 做 React 全局状态管理:告别 Context 重渲染,3 个实战模式与持久化
前端
用户81818706274626 分钟前
第27章 消息丢失/重复消费的全链路排查(生产者→Broker→消费者)
java·后端
IMPYLH31 分钟前
HTML 的 <section> 元素
前端·html