this指向的改变

1.改变this指向的方法:

①箭头函数:没有自己的指向,与上下文一致。

        let a = 100;
        let obj = {
            a: 1,
            fn() {
                //this->obj
                console.log(this.a);
                setTimeout(() => {
                    //this->obj
                    console.log(this);//obj
                    console.log(this.a);//1
                }, 1000);
            }
        }
        obj.fn()
        let test = obj.fn;
        test();
        // test->内部的this是window 
        // 延时器的箭头函数的环境变成 了 window

②bind(this,参数1,参数2)  返回一个新的函数,改变新函数中this指向为bind的第一个参数,参数1,参数2主要是给新的函数传递实参。

function fn() {
            let info = '昨天下了一天的雨...';
            console.log(this, info);
        }
        let obj = {
            name: '郝五一'
        }

        let fn1 = fn.bind(obj);
        console.log(fn1);
        fn1();

③call(this指向,参数1,参数2...) 改变this指向,是调用它的函数,给函数传递参数以单个参数的形式传递。

function goods(name, price) {
            console.log(name, price, this);
        }
       goods.call(obj,'睡觉',28);

④apply(this指向,[参数1,参数2...]) 改变this指向,是调用它的函数,是以数组的形式给函数传递参数。

function goods(name, price) {
            console.log(name, price, this);
        }
      goods.apply(obj, ['打游戏', 18]);
补充:apply() 给函数传递参数都是以数组的形式,被函数或方法接受的时候会自动展开。
let arr = [33,22,11,3,56,77];
let res = Math.min.apply({},arr);
console.log(res);

2.总结:

①bind一般用在不立即调用的函数上,回调函数(事件,延时器和定时器)

②call/apply 立即调用又要改变this指向的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值