如何理解 this 的本质?(5种):

在 js 中 this 不是固定不变的,它会随着执行环境的改变而改变。要注意的是 this 取什么值,是在执行时确认的,定义时无法确认。 this 的调用大概分为四种场景:

* (1)全局函数的this指向全局的Window对象

* (2)当函数作为对象的方法调用的时候,this指向该对象

* (3)构造函数的this指向实例化的对象

* (4)匿名函数的this指向全局的Window对象

匿名函数的this指向全局的Window对象:但是我们如何在匿名函数中获取user对象?(2种方法):

const user = {
  name: "lisi",
  age: 18,
  say() {
    console.log(this); // this指向user对象
    setInterval(function () {
      console.log(this); // this指向全局的Window对象
    }, 1000);
  },
};
user.say();

有两种方式:

方式一:通过是用箭头函数来实现

const user1 = {
    name: "lisi",
    age: 18,
    say() {
        console.log(this); // this指向user1对象
        setTimeout(() => {
            console.log(this); // this指向user1对象
        }, 1000);
    },
};
user1.say();

方式二:通过闭包的方式来实现:什么是闭包:子函数可以去访问父函数的局部变量。

const user2 = {
    name: "lisi",
    age: 18,
    say() {
        const that=this
        console.log(this); // this指向user2对象
        setTimeout(function () {
            console.log(that); // this指向user2对象
        }, 1000);
    },
};
user2.say();

* (5)箭头函数的this指向父级的作用域,箭头函数没有this

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值