JavaScript中this指向详解:从全局对象到严格模式

作者:半夏

时间:2026-10-24

浏览:326

本文深入解析JavaScript中this关键字的指向机制。通过代码示例,详细阐述this在不同运行环境下的表现,包括全局上下文、对象方法、构造函数以及严格模式下的具体行为。文章指出this并非固定不变,而是随调用方式动态确定,并解释了严格模式下函数this为undefined的特殊情况,帮助开发者准确理解并应用这一核心概念。

文章目录

在JavaScript中,this关键字的行为颇具特点。与Java等面向对象语言中this固定指向当前对象引用不同,JavaScript中的this值并非一成不变,而是根据代码运行时的具体环境动态确定。

this的基本概念

首先通过代码示例进行说明:

方法中的this


function test(){
    console.log(this);
}

this的基本概念

对象中的this


function test(){
    console.log(this);
}

this的基本概念

当this出现在方法内部时,它指向该方法所属的对象。例如,如果调用的是挂载在window对象上的方法,this将指向window;而如果是Person对象的方法,this则指向Person对象实例。

由此可知,如果在控制台直接单独使用this,它代表的是全局对象。

this的基本概念

隐藏的this机制

在对象定义中,可以预先声明一个变量:


var Person1={
    name:"张三",
    age:18
}
var Person2={
    name:"李四",
    age:19
}

这种写法较为繁琐,因此可以借鉴Java类的概念进行优化:


var Person=function(name,age){
    this.name=name,
    this.age=age
       
}
var Person1=new Person("张三",18);
var Person2=new Person("李四",19);

this的基本概念

实际上,在执行new操作时,内部隐藏了一个return this语句。如果不使用new关键字,则不会返回这个新创建的对象。

this的基本概念

为了更清晰地展示这一过程,我们可以补全代码:


var Person=function(name,age){
    this.name=name,
    this.age=age
    return this;
}
var Person1=new Person("张三",18);
var Person2=new Person("李四",19);

this的基本概念

基于此原理,甚至可以手动模拟实现类似this的效果:


var Person=function(name,age){
    var that={};
    that.name=name,
    that.age=age
    return that;
}
var Person1=new Person("张三",18);
var Person2=new Person("李四",19);

this的基本概念

严格模式下的this

this在严格模式(strict mode)和非严格模式下的表现存在显著差异。


function test() {
  return this;
}

# 如果js前面添加"use strict" 代表是严格模式
"use strict";
function test() {
  return this;
}

this的基本概念

从上述示例可以看出,在非严格模式的函数中,this默认绑定到全局对象,因此打印结果为全局对象;而在严格模式下,函数内部的this不再绑定到全局对象,其值为undefined。

总结

本文到此结束,希望能为读者提供帮助,同时也欢迎关注本站获取更多技术内容!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章