Mechanism
Phương thức apply có cách hoạt động giống như phương thức call Method in JS.
Tuy nhiên, đối số thứ hai mà phương thức apply nhận vào là một mảng thay vì là nhiều tham số như phương thức call.
Ví dụ:
function Animal(name, weight) {
this.name = name
this.weight = weight
}
function Horse(name, weight, legs) {
Animal.call(this, name, weight)
this.legs = legs
}
const pony = new Horse("Little Pony", 40, 4)
console.log(pony) // Horse {name: 'Little Pony', weight: 40, legs: 4}Do tham số thứ hai là một mảng, ta có thể tận dụng điều này để triển khai tính kế thừa (Inheritance) gọn gàng hơn phương thức call (tham khảo call Method in JS):
function Animal(name, weight) {
this.name = name
this.weight = weight
}
function Horse() {
Animal.call(this, arguments)
this.legs = legs
}
const pony = new Horse("Little Pony", 40, 4)
console.log(pony) // Horse {name: 'Little Pony', weight: 40, legs: 4}Trong mỗi hàm đều có đối tượng arguments để chứa danh sách tham số, ta có thể truyền thẳng đối tượng này vào tham số thứ hai của phương thức apply.
Ngoài ra, constructor của lớp Horse cũng không cần phải liệt kê tham số, giúp code sạch đẹp hơn.
Summary
Cú pháp tổng quát:
apply(thisArg, [arg1, arg2, ...])
- Thực hiện bind từ khóa
thisvới đối tượngthisArgtruyền vào.- Có thực hiện gọi hàm.
- Tham số thứ hai của phương thức
applylà một mảng danh sách các tham số sẽ được truyền vào hàm gốc