关于ts中的指针问题call,bind, apply

本文介绍了JavaScript中this指向的概念及通过call、apply与bind三种方法实现this指向改变的具体方式。详细解释了每种方法的工作原理,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相同

  • 都可以应用于改变this的指向问题

不同

  • call 传入…args
  • apply 传入数组
  • bind 传入…args

实现方法

call

  • 原理主要是将方法复制给调用的this,再进行删除
  • 代码

function dmCall(context: any) {
    const fn = Symbol();
    context[fn] = this;
    const args = [...arguments].slice(1);
    let result = context[fn](...args);
    return result;
}

apply

与call一样, 只是将参数改成了数组

function dmApply(context: any, args?: any[]) {
    const fn = Symbol();
    context[fn] = this;
    let result;
    if( args === null || args === undefined) {
        result = context[fn](args);
    } else if (typeof args === 'object') {
        console.log(...args)
        result = context[fn](...args);
    }
    delete context[fn];
    return result;
}

bind

  • 比较复杂,需要新建一个函数返回,其中需要用到apply
  • 原理就是,创建一个方法,将参数放入,返回该函数
function myBind(context) {
    const fn = Symbol();
    context[fn] = this;
    const self = context;
    const args = [...arguments].slice(1);
    function bind() {
        const res = [...arguments, ...args];
        return context[fn].apply(self, res);
    }
    return bind;
}
Function.prototype.myBind = myBind
math1.add.myBind(a, 10)(1);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东哥aigc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值