Cách sử dụng từ khóa this trong JavaScript
Javascript căn bản | by
Trong JavaScript, từ khóa this
là một trong những khái niệm quan trọng nhưng cũng gây nhiều nhầm lẫn cho người mới học. this
không cố định mà thay đổi tùy thuộc vào ngữ cảnh thực thi của nó. Khi làm việc với các hàm, đối tượng, class, hay thậm chí trong các sự kiện DOM, this
có thể tham chiếu đến những đối tượng khác nhau. Hiểu rõ cách hoạt động của this
giúp lập trình viên viết mã hiệu quả hơn, tránh được các lỗi phổ biến và tận dụng tối đa sức mạnh của JavaScript. Trong bài viết này, mình sẽ cùng tìm hiểu chi tiết về cách sử dụng this
trong từng ngữ cảnh khác nhau, đồng thời chỉ ra những lỗi thường gặp và cách khắc phục.
Giới thiệu về từ khóa this trong JavaScript
Trong JavaScript, this
là một từ khóa đặc biệt dùng để tham chiếu đến một đối tượng nhất định trong ngữ cảnh thực thi của nó. Giá trị của this
không cố định mà thay đổi tùy thuộc vào cách và nơi mà nó được sử dụng.
Tóm lại, this
là một biến đặc biệt được tự động gán giá trị khi một hàm hoặc phương thức được gọi, và giá trị của nó sẽ thay đổi tùy theo ngữ cảnh thực thi.
Ví dụ cơ bản:
console.log(this); // Trong môi trường trình duyệt, this trỏ đến window
this tham chiếu đến đối tượng nào phụ thuộc vào ngữ cảnh thực thi
JavaScript xác định giá trị của this
dựa trên cách một hàm được gọi. Dưới đây là một số ngữ cảnh phổ biến mà this
có thể tham chiếu đến những đối tượng khác nhau:
Trong phạm vi toàn cục (Global Context)
- Trong môi trường trình duyệt,
this
trỏ đến đối tượngwindow
. - Trong chế độ
strict mode
,this
sẽ làundefined
.
Ví dụ:
console.log(this); // Trong trình duyệt, in ra Window object "use strict"; function test() { console.log(this); // undefined trong strict mode } test();
Trong một phương thức của đối tượng (Object Method Context)
- Khi
this
được gọi bên trong một phương thức của một đối tượng, nó tham chiếu đến chính đối tượng đó.
Ví dụ:
const person = { name: "John", greet: function() { console.log(this.name); // this tham chiếu đến object person } }; person.greet(); // Output: "John"
Trong một hàm thông thường (Function Context)
- Khi một hàm được gọi một cách bình thường (không phải là phương thức của một đối tượng),
this
mặc định tham chiếu đếnwindow
(hoặcundefined
trong strict mode).
Ví dụ:
function showThis() { console.log(this); // Trong trình duyệt: window, trong strict mode: undefined } showThis();
Trong một hàm khởi tạo (Constructor Function Context)
- Khi sử dụng
new
để tạo một đối tượng từ một hàm constructor,this
trỏ đến đối tượng mới được tạo.
Ví dụ: