javascript this关键字是什么_它指向什么对象

this 是 JavaScript 中动态确定的关键字,指向函数调用时的上下文对象,具体取决于调用方式:普通调用时非严格模式指向全局对象、严格模式为 undefined;作为对象方法调用时指向该对象;构造函数或 class 实例方法中指向新创建的实例;箭头函数无自身 this;可通过 call/apply/bind 显式绑定。

this 是 JavaScript 中的一个关键字,它不是一个固定值,而是在函数执行时动态确定的,指向**当前函数调用的上下文对象**。它的具体指向完全取决于函数**如何被调用**,而不是函数定义的位置或方式。

普通函数调用时的 this

在非严格模式下,直接调用函数(如 fn()),this 指向全局对象(浏览器中是 window,Node.js 中是 global);在严格模式下,thisundefined

  • 不推荐依赖这种调用方式判断 this,容易出错且可读性差
  • 可通过 use strict 主动避免意外绑定到全局对象

作为对象方法调用时的 this

当函数作为对象的属性被调用(如 obj.method()),this 指向该对象(即点号左边的对象)。

  • 这是最常见也最符合直觉的 this 绑定场景
  • 注意:如果把方法单独提取出来(如 const fn = obj.method;),再调用 fn(),就变成普通调用,this 不再指向 obj

构造函数与 class 中的 this

使用 new 调用函数时,this 指向新创建的实例对象;在 class 的实例方法中,this 默认指向该 class 的实例。

  • 构造函数内部的 this 是新对象,可用来初始化属性和方法
  • 箭头函数不能用作构造函数,也没有自己的 this,会沿作用域链向上找

显式绑定与 call/apply/bind

可以用 callapplybind 显式指定函数运行时的 this 值。

  • fn.call(obj, arg1, arg2) 立即执行,this 设为 obj
  • fn.bind(obj) 返回一个新函数,this 永远绑定为 obj
  • 常用于事件回调、定时器或高阶函数中“固化” this