Phương thức apply() trong hàm trong JavaScript
Javascript nâng cao | by
Trong JavaScript, phương thức apply()
là một công cụ quan trọng giúp lập trình viên kiểm soát giá trị this
khi gọi một hàm. Nó cho phép chúng ta gọi một hàm với một đối tượng cụ thể và truyền các tham số dưới dạng một mảng.
So với call()
, phương thức apply()
đặc biệt hữu ích khi danh sách tham số có sẵn dưới dạng một mảng, giúp mã nguồn gọn gàng và linh hoạt hơn. Bên cạnh đó, apply()
cũng thường được sử dụng để mượn phương thức từ object khác và làm việc với các hàm có tham số biến đổi như Math.max()
hoặc Math.min()
.
Việc hiểu rõ cách hoạt động của apply()
không chỉ giúp chúng ta tránh lỗi khi thao tác với this
mà còn tối ưu hóa hiệu suất và tổ chức mã một cách hiệu quả hơn. Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về cú pháp, cách sử dụng, sự khác biệt giữa apply()
, call()
và bind()
, cũng như các ứng dụng thực tế của phương thức này.
Phương thức apply() trong JavaScript
Trong JavaScript, phương thức apply()
là một công cụ quan trọng được sử dụng để gọi một hàm với một giá trị this
cụ thể và truyền đối số dưới dạng một mảng hoặc một đối tượng giống mảng (array-like object
).
Phương thức này có chức năng tương tự như call()
, nhưng thay vì truyền từng tham số riêng lẻ, apply()
yêu cầu tất cả tham số của hàm được đặt trong một mảng. Điều này giúp xử lý các trường hợp danh sách tham số có độ dài không cố định một cách dễ dàng và gọn gàng hơn.
Vai trò của apply() trong việc kiểm soát this khi gọi hàm
Một trong những vấn đề quan trọng trong JavaScript là giá trị của this
bên trong một hàm có thể thay đổi tùy theo cách hàm được gọi. Nếu không kiểm soát đúng, this
có thể trỏ đến window
(trong môi trường trình duyệt) hoặc undefined
(trong chế độ strict mode).
Phương thức apply()
giúp giải quyết vấn đề này bằng cách cho phép chúng ta chỉ định một giá trị cụ thể cho this
khi gọi hàm. Điều này đặc biệt hữu ích trong các trường hợp như:
- Mượn phương thức từ một object khác: Dùng
apply()
để tái sử dụng một phương thức của một object khác mà không cần sao chép hoặc viết lại mã. - Gọi hàm với danh sách tham số không cố định: Khi có dữ liệu được lưu trữ dưới dạng mảng,
apply()
giúp truyền nó vào một hàm mà không cần giải nén từng phần tử. - Làm việc với các hàm có tham số biến đổi:
apply()
thường được sử dụng với các phương thức nhưMath.max()
hoặcMath.min()
để tìm giá trị lớn nhất/nhỏ nhất trong một mảng.
Ví dụ:
const person = { fullName: function() { return this.firstName + " " + this.lastName; } }; const person1 = { firstName: "John", lastName: "Doe" }; const person2 = { firstName: "Jane", lastName: "Smith" }; console.log(person.fullName.apply(person1)); // "John Doe" console.log(person.fullName.apply(person2)); // "Jane Smith"