返回

看懂 JavaScript 中的 this,这一篇文章就够了

前端

JavaScript 中的 this 是一个非常重要的概念,也是最容易让人困惑的概念之一。这篇文章将从最基本的概念开始,一步步带领你理解 this 的含义和用法。

什么是 this?

this 关键字代表当前执行代码的对象。在 JavaScript 中,this 的值取决于函数的调用方式。

this 的值是如何确定的?

  1. 全局作用域中的 this

    在全局作用域中,this 的值是 window 对象。

  2. 函数调用中的 this

    在函数调用中,this 的值取决于函数的调用方式。

    • 如果函数以普通函数的方式调用,this 的值是全局对象 window。
    • 如果函数以方法的方式调用,this 的值是该方法所属的对象。
    • 如果函数以箭头函数的方式调用,this 的值是箭头函数定义时所在的作用域中的 this 值。

this 的常见用法

  1. 访问对象属性和方法

    this 可以用于访问对象属性和方法。例如,以下代码使用 this 来访问对象 person 的 name 属性和 sayHello 方法:

    const person = {
      name: "John",
      sayHello: function () {
        console.log("Hello, my name is " + this.name);
      }
    };
    
    person.sayHello(); // 输出:Hello, my name is John
    
  2. 事件处理程序中的 this

    this 可以用于事件处理程序中来访问事件源对象。例如,以下代码使用 this 来访问 click 事件的事件源对象:

    const button = document.querySelector("button");
    
    button.addEventListener("click", function () {
      console.log(this); // 输出:<button>...</button>
    });
    
  3. 构造函数中的 this

    this 可以用于构造函数中来访问新创建的对象。例如,以下代码使用 this 来访问新创建的 Person 对象:

    function Person(name) {
      this.name = name;
    }
    
    const person = new Person("John");
    
    console.log(person); // 输出:{ name: "John" }
    

如何理解和使用 this

理解和使用 this 的关键是牢记以下几点:

  1. this 的值取决于函数的调用方式。

  2. this 可以用于访问对象属性和方法、事件处理程序中的事件源对象以及构造函数中的新创建的对象。

  3. 使用箭头函数时,this 的值是箭头函数定义时所在的作用域中的 this 值。

掌握了这些要点,你就能很好地理解和使用 this 了。