𝗙𝗮𝗰𝘁𝗼𝗿𝘆 𝗙𝘂𝗻𝗰𝘁𝗶𝗼𝗻𝘀 𝗮𝗻𝗱 𝗖𝗼𝗻𝘀𝘁𝗿𝘂𝗰𝘁𝗼𝗿 𝗙𝘂𝗻𝗰𝘁𝗶𝗼𝗻𝘀 𝗶𝗻 𝗝𝗮𝘃𝗮𝗦𝗰𝗿𝗶𝗽𝘁
Tạo từng đối tượng một là một sai lầm.
Nếu bạn có 100 người bạn cùng lớp và cần tạo một đối tượng cho mỗi người, việc viết từng đối tượng riêng lẻ sẽ dẫn đến nhiều vấn đề. Bạn phải lặp lại logic quá nhiều lần. Bạn cũng có nguy cơ gặp lỗi (bugs). Ví dụ, bạn có thể vô tình ghi đè lên tên thuộc tính ở một phần khác trong mã nguồn của mình.
Bạn cần một cách tốt hơn để tái sử dụng logic.
Factory Functions Hãy nghĩ về một nhà máy. Bạn đưa nguyên liệu thô vào và nhận được một thành phẩm. Một factory function cũng hoạt động tương tự. Nó nhận các tham số và trả về một đối tượng mới.
Ví dụ:
function classFactory(name) {
return {
reply() {
return `${name} is present`
}
}
}
Cách tiếp cận này giúp giữ cho biến name được an toàn. Bạn không thể vô tình thay đổi tên vì nó nằm trong phạm vi (scope) của hàm. Bạn chỉ cần viết logic một lần và tái sử dụng nó nhiều lần.
Constructor Functions
Constructor functions cũng dùng để tạo đối tượng. Chúng sử dụng từ khóa this và từ khóa new. Theo quy ước, các hàm này sẽ bắt đầu bằng một chữ cái viết hoa.
Ví dụ:
function Classmate(name) {
this.name = name
this.reply = function() {
return `${this.name} is present`
}
}
Khi bạn sử dụng từ khóa new, JavaScript sẽ thực hiện công việc thay cho bạn. Nó tạo ra một đối tượng mới, gán nó cho this và tự động trả về đối tượng đó. Bạn không cần phải sử dụng câu lệnh return.
Mở rộng mã nguồn của bạn Bạn có thể kết hợp các phương pháp này với mảng (arrays) để xử lý lượng dữ liệu lớn.
const names = ['Kali', 'Andrew', 'Pearl', 'Percy']
const classmates = names.map(name => new Classmate(name))
classmates.forEach(c => console.log(c.reply()))
Điều này giúp mã nguồn của bạn sạch sẽ và có khả năng mở rộng cao.
Mục tiêu chính rất đơn giản:
- Viết logic một lần.
- Tái sử dụng ở mọi nơi.
- Tránh lặp lại.
Nguồn: https://dev.to/pearlodi/factory-functions-and-constructor-functions-in-javascript-lmb