手写call函数

javascript中的call方法是使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数。这样就可以修改this的指向。

下面是如何自己实现一个call方法,主要注意的点是,如何修改this的指向,我们都知道在普通函数中this是指向函数的调用者,那么我们要达到将this指向传入的target上即可,也就是说使用target来调用我们想调用的函数就可以,所以可以将需要调用的函数作为target对象上的一个属性,通过target.fn的方式来调用,就可以修改fn内部的this指向了。最后记着要删除掉我们自己在target上添加的fn属性即可

Function.prototype.myCall = function (target) {
        // 判断调用对象
        if (typeof this !== "function") {
            console.error("type error");
        }
        // 获取函数的参数
        let args = [...arguments].slice(1)
        // 判断是否传入目标对象
        target = target || window
        // 将函数作为目标对象的一个属性
        target.fn = this
        // 调用函数
        let res = target.fn(...args)
        // 删除刚才新增的函数属性
        delete target.fn
        return res
    }

调用:

let obj = {
        mail : "xxx.com"
    }
function sayHi(name, age) {
    console.log(this.mail);
    console.log(name, age);
}
sayHi.myCall(obj, 'liderder', 21)

运行结果:
在这里插入图片描述
这样就大致的实现了一个call方法的基本功能了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值