Trang chủ Javascript Từ khóa this

Từ khóa this

Nguyễn Dương 20-06-2024

Định nghĩa this

- Biến this là một biến đặc biệt được tạo trong mọi ngữ cảnh thực thi (Execution Context) và cho mọi function nào.

- This trỏ tới giá trị của chủ sở hữu của hàm nơi mà this được gọi.

- This không phải static, nó phụ thuộc vào cách mà hàm được gọi - giá trị của this chỉ được gán khi hàm thực sự được gọi.

 

Sử dụng this trong các hàm

Có 4 kiểu hàm:

- Hàm là một phương thức của một đối tượng: Khi gọi this thì giá trị của this sẽ trỏ đến đối tượng mà phương thức của đối tượng đó được gọi.

- Hàm là một function bình thường, không gắn với một object, khi gọi this sẽ trả về undefined đối với strict-mode. Nếu không đặt trong chế độ strict-mode, this sẽ trả về global object trong trình duyệt là đối tượng window.

- Hàm là một arrow function (lexical this). Biến this sẽ có giá trị là giá trị của hàm bao bên ngoài nó, hàm parent.

- Hàm là một Event Listener, từ khóa this sẽ luôn trỏ đến phần tử DOM mà hàm xử lý được gắn vào.

 

Ngoài các cách gọi này còn có call, new, apply, bind, ...

 

Lưu ý khi dùng từ khóa this

- this không bao giờ trỏ đến hàm mà chúng đang sử dụng.

- this không bao giờ trỏ đến biến môi trường (variable environment).

 

So sánh hàm thông thường và hàm mũi tên

this trong hàm mũi tên

- Biến this trong hàm mũi tên không trỏ đến đối tượng gọi nó mà nhận những giá trị từ hàm bao ngoài.

- Không nhầm lẫn giữa khai báo object với một block scope.

- Biến this ở global object luôn là window object.

 

Tại sao không nên sử dụng var

- Các biến được khai báo var sẽ tạo ra các thuộc tính trên global object.

Không sử dụng hàm mũi tên để khai báo phương thức (chỉ sử dụng hàm thông thường)

Hàm ở bên trong phương thức

- Hàm ở bên trong một phương thức không thể truy cập vào biến this của phương thức đó mà trả về undefine.

- Để sử dụng được this trong trường hợp này có 2 cách:

1. Tạo một biến const self = this, và sử dụng hàm self.

2. Sử dụng hàm mũi tên.

 

Từ khóa arguments (đối số)

- Từ khóa arguments chỉ có sẵn trong các hàm thông thường, không có trong hàm mũi tên.

- Nó là một mảng trỏ đến các đối số truyền vào hàm.

- Có thể truyền nhiều tham số hơn số lượng các tham số được đặt tên, tất cả các đối số đều được hiển thị trong mảng arguments.

function sum (a, b) {

    console.log(arguments);

    return a + b;

}

 

sum(5, 6);

sum(1, 2, 3, 4, 5);

 

Bài viết liên quan

Từ khóa this Từ khóa this
Scope và scope chain trong javascript Scope và scope chain trong javascript
Nguyên lý Javascript thực thi chương trình Nguyên lý Javascript thực thi chương trình
Bất đồng bộ trong javascript Bất đồng bộ trong javascript
Lập trình hướng đối tượng Lập trình hướng đối tượng
Event trong javascript Event trong javascript