前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手动实现call

手动实现call

原创
作者头像
剁椒鱼鳞
发布2023-05-28 16:25:53
3410
发布2023-05-28 16:25:53
举报
文章被收录于专栏:前端小学生

分析:

  1. 将函数设为对象的属性
  2. 执行&删除这个函数
  3. 指定this到函数并传入给定参数执行函数
  4. 如果不传入参数,默认指向为 window
代码语言:javascript
复制
Function.prototype.myCall = function (ctx, ...args) {
    // call的第一个参数为null/undefined时,this则指向全局window(这里是浏览器环境,node环境则不是window),其余则转为对象
    ctx = (ctx === null || ctx === undefined) ? window : Object(ctx);
    // 这里之所以采用symbol,是为了避免和对象的属性重名
    const func = Symbol('func');
    // 优化打印this的console值
    Object.defineProperty(ctx, func, {
        enumerable: false,
        value: this,
    })
    const result = ctx[func](...args);
    delete ctx[func];
    return result;
}  

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档