js中的this

本文详细阐述了JavaScript中this关键字的动态指向特性,它根据函数的调用方式和执行环境变化。在全局环境,this指向全局对象;在方法中,this指向方法所属的对象;箭头函数则继承定义时的上下文。此外,this在构造函数、原型链、类以及事件处理中的行为也有特殊规则,可以通过call、apply和bind方法来修改this的指向。

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

js中的this是一个指针型变量,它动态指向当前函数的运行环境,它固定不变的,而是根据调用的上下文(执行时环境)改变而改变;

不同使用条件下this 的指向

  • 在全局执行环境中(在任何函数体外部)this都指向全局对象globalThis,(在浏览器中全局对象为window);
  • 在方法中,this 表示该方法所属的对象;
  • 在函数中,this的值取决于函数被调用的方式和模式:
    • 普通函数中:
      • 严格模式下,函数中的thisundefined;
      • 在非严格模式下,this 的默认指向全局对象;
    • 箭头函数中: 箭头函数中没有this,也可以认为箭头函数中的this会继承定义函数时的上下文,可以理解为和外层函数指向同一个this,也就是this指向于函数作用域所处的对象;
    • 构造函数中: 构造函数中的this是指向实例;
  • 在对象中:对象内部方法的this指向调用这些方法的对象,也就是谁调用就指向谁:
    • 函数的定义位置不影响其this指向,this指向只和调用函数的对象有关;
    • 多层嵌套的对象,内部方法的this指向离被调用函数最近的对象;
  • 在原型链中:对于在对象原型链上某处定义的方法,同样的概念也适用。如果该方法存在于一个对象的原型链上,那么 this 指向的是调用这个方法的对象,就像该方法就在这个对象上一样;
  • 在类中:
    • 在类的构造函数中,this是一个常规对象,类的静态方法属于类的自身的属性,类的非静态方法会添加到this的原型中;
    • 派生类中,派生类的构造函数没有初始化this绑定,在构造函数中调用super()会生成一个this绑定,派生类不能在调用super()之前返回,除非其构造函数返回的是一个对象,或者根本没有构造函数;
  • 在事件中,在HTML事件句柄中,this指向了接收事件的HTML元素;

this的使用

  • 获取属性的对象;
  • 获取DOM元素;
  • 在函数体内部,引用当前环境的其他变量;

修改this指向的方法(之前详细写过)

  • call();
  • apply();
  • bind();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值