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 this với đối tượng thisArg truyền vào.
  • Có thực hiện gọi hàm.
  • Tham số thứ hai của phương thức apply là một mảng danh sách các tham số sẽ được truyền vào hàm gốc
table tags as Tags, file.cday as Created
from [[apply Method in JS]]
sort file.ctime asc