js改变this指针

1.apply

apply接收的参数为两个,第一个是指针的指向,第二个是函数接收的参数,类型为数组类型。只临时改变this指向一次

function a(...args) {
    console.log("被改变this指针",args);
}

let obj = {}

fn.apply(obj,[1,2,3]);//如果第一个参数为null或者undefined 那么 this指向window对象

当使用js写重载函数时,可以使用到apply

function addMethod(object,name,fn) {
    //把原来的object[name]方法,保存在old中
    var old = object[name];

    //重新定义 object[name]方法
    object[name] = function() {
        //如果函数需要的参数 和实际传入的参数的个数相同,就直接调用fn
        if (fn.length === arguments.length) { //函数的length表示形参的个数,arguments是所有函数除了箭头函数都有的一个类数组对象,是局部变量
            return fn.apply(this,arguments);
        } else {//如果不相同,就判断old是不是函数,如果是就调用old,也就是原来保存的object[name]方法
            return old.apply(this,arguments);
        }
    }
}

2.call

跟apply基本一致,除了第二个参数不是数组,而是一个逗号分隔的参数列表。

function a(...args) {
    console.log("被改变this指针",args);
}

let obj = {}

fn.call(obj,1,2,3);//如果第一个参数为null或者undefined 那么 this指向window对象

3.bind

bind的参数方式和call一致。bind方法创建一个新的函数,在bind被调用时,新函数的this指向为bind的第一个参数,其余参数作为新函数的参数,这个改变是永久的,创建的新函数this永久指向第一个bind参数。其余两个改变指向是立即执行,而bind是被改变函数调用时才会执行。

参考链接苏恩博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值