0
0
Lập trình
NM

Nắm Vững Từ Khóa 'this' Trong JavaScript

Đăng vào 4 ngày trước

• 5 phút đọc

Hiểu Về Từ Khóa this Trong JavaScript

Từ khóa this trong JavaScript là một từ khóa đặc biệt dùng để chỉ ngữ cảnh của đoạn mã đang thực thi. Nó có thể gây nhầm lẫn, đặc biệt đối với những người mới bắt đầu, nhưng việc hiểu cách this hoạt động là rất quan trọng để phát triển JavaScript hiệu quả.

Giới Thiệu Về this

Từ khóa this hoạt động khác nhau tùy thuộc vào nơi nó được sử dụng. Trong phần này, chúng ta sẽ khám phá các ngữ cảnh khác nhau mà this có thể được sử dụng.

1. Ngữ Cảnh Toàn Cục

Trong ngữ cảnh toàn cục, this tham chiếu đến đối tượng toàn cục. Trong môi trường trình duyệt, this chỉ đến đối tượng window, trong khi trong môi trường Node.js, nó chỉ đến đối tượng global.

javascript Copy
console.log(this);  // trình duyệt: đối tượng window

2. Hàm Thông Thường

Bên trong một hàm thông thường, this tham chiếu đến đối tượng toàn cục. Tuy nhiên, trong chế độ nghiêm ngặt, this được đặt là undefined.

javascript Copy
function example() {
  console.log(this);  // trình duyệt: đối tượng window, chế độ nghiêm ngặt: undefined
}
example();

3. Phương Thức Của Đối Tượng

Khi được sử dụng bên trong một phương thức của đối tượng, this tham chiếu đến chính đối tượng đó.

javascript Copy
const person = {
  name: 'John',
  greet: function() {
    console.log(this.name);  // "John", this tham chiếu đến đối tượng person
  }
};

person.greet();

4. Hàm Mũi Tên

Hàm mũi tên hoạt động khác với hàm thông thường. Chúng liên kết tĩnh this, có nghĩa là this bên trong một hàm mũi tên tham chiếu đến this của hàm bên ngoài. Đây được gọi là phạm vi từ vựng.

javascript Copy
const person = {
  name: 'John',
  greet: function() {
    const innerGreet = () => {
      console.log(this.name);  // "John", this tham chiếu đến this của phương thức greet
    };
    innerGreet();
  }
};

person.greet();

5. Phương Thức Trong Lớp

Trong các lớp JavaScript, this tham chiếu đến thể hiện của lớp.

javascript Copy
class Person {
  constructor(name) {
    this.name = name;
  }

  greet() {
    console.log(`Xin chào, ${this.name}`);
  }
}

const john = new Person('John');
john.greet();  // "Xin chào, John"

6. Bộ Xử Lý Sự Kiện

Bên trong một bộ xử lý sự kiện DOM, this tham chiếu đến phần tử DOM đã kích hoạt sự kiện.

javascript Copy
const button = document.querySelector('button');
button.addEventListener('click', function() {
  console.log(this);  // xuất ra phần tử nút đã nhấn
});

Liên Kết Động Của this

Từ khóa this được liên kết động, có nghĩa là giá trị của nó phụ thuộc vào cách mà hàm được gọi.

  • Trong thực thi toàn cục, this tham chiếu đến đối tượng toàn cục.
  • Trong các cuộc gọi phương thức, this tham chiếu đến đối tượng mà phương thức thuộc về.
  • Sử dụng các phương thức call, apply hoặc bind cho phép bạn thiết lập rõ ràng this.

Chế Độ Nghiêm Ngặt và this

Trong chế độ nghiêm ngặt, hành vi của this được xác định nghiêm ngặt hơn. Bên trong các hàm thông thường, this được đặt là undefined thay vì đối tượng toàn cục, ngăn chặn việc sửa đổi ngẫu nhiên đối tượng toàn cục.

javascript Copy
'use strict';

function example() {
  console.log(this);  // undefined
}
example();

Các Thực Hành Tốt Nhất

  • Hiểu rõ ngữ cảnh: Luôn kiểm tra ngữ cảnh mà bạn đang làm việc để hiểu cách this hoạt động.
  • Sử dụng hàm mũi tên: Khi cần giữ this từ ngữ cảnh bên ngoài, hãy sử dụng hàm mũi tên.
  • Sử dụng chế độ nghiêm ngặt: Kích hoạt chế độ nghiêm ngặt để tránh những lỗi không mong muốn liên quan đến this.

Những Cạm Bẫy Thường Gặp

  • Nhầm lẫn giữa các ngữ cảnh: Nhiều lập trình viên mới thường nhầm lẫn về giá trị của this khi không hiểu rõ ngữ cảnh của nó.
  • Sử dụng this trong hàm thông thường: Nếu không sử dụng chế độ nghiêm ngặt, this có thể gây ra hành vi không mong muốn.

Mẹo Tối Ưu Hiệu Suất

  • Giảm thiểu việc tạo hàm bên trong vòng lặp: Điều này có thể ảnh hưởng đến hiệu suất, hãy cân nhắc sử dụng hàm mũi tên hoặc phương thức bên ngoài.
  • Sử dụng bind một cách hợp lý: Thay vì gọi bind nhiều lần, hãy tạo ra các phương thức đã được liên kết một lần để tiết kiệm thời gian chạy.

Giải Quyết Vấn Đề

  • Nếu this không hoạt động như mong muốn, hãy kiểm tra cách bạn đang gọi hàm.
  • Sử dụng console.log(this) để xác định giá trị của this trong các ngữ cảnh khác nhau.

Kết Luận

Hiểu rõ về từ khóa this là điều cần thiết cho việc phát triển JavaScript hiệu quả. Bằng cách nhận ra cách this hoạt động trong các ngữ cảnh khác nhau, bạn có thể viết mã mạnh mẽ và dễ bảo trì hơn. Hãy nhớ rằng this là động và giá trị của nó phụ thuộc vào ngữ cảnh thực thi. Với thực hành và kinh nghiệm, bạn sẽ trở nên tự tin hơn khi sử dụng this trong các dự án JavaScript của mình.

Câu Hỏi Thường Gặp

1. Tại sao this lại là undefined trong chế độ nghiêm ngặt?

Trong chế độ nghiêm ngặt, this không tự động tham chiếu đến đối tượng toàn cục, do đó nó trở thành undefined trong các hàm thông thường.

2. Làm thế nào để tôi có thể kiểm soát giá trị của this?

Bạn có thể sử dụng các phương thức call, apply, hoặc bind để kiểm soát giá trị của this trong các hàm.

3. Khi nào nên sử dụng hàm mũi tên thay vì hàm thông thường?

Hàm mũi tên nên được sử dụng khi bạn cần giữ giá trị của this từ ngữ cảnh bên ngoài, chẳng hạn như trong các hàm lồng nhau hoặc bộ xử lý sự kiện.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào