Constructor Design Pattern trong JavaScript là một mô hình thiết kế được sử dụng để tạo ra các đối tượng. Mô hình này tận dụng hàm khởi tạo (constructor) để định nghĩa các thuộc tính và phương thức cho các đối tượng. Dưới đây là cách triển khai Constructor Design Pattern trong JavaScript:

1. Định nghĩa Hàm Constructor

Hàm constructor là một hàm bình thường, nhưng khi được gọi bằng từ khóa new, nó sẽ tạo ra một đối tượng mới.

Ví dụ:

function Person(name, age) {
    this.name = name;
    this.age = age;

    this.sayHello = function() {
        console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
    };
}

2. Tạo Đối Tượng

Khi bạn gọi hàm constructor với từ khóa new, một đối tượng mới sẽ được tạo ra và trả về.

Ví dụ:

const person1 = new Person('Alice', 30);
const person2 = new Person('Bob', 25);

person1.sayHello(); // In ra "Hello, my name is Alice and I am 30 years old."
person2.sayHello(); // In ra "Hello, my name is Bob and I am 25 years old."

3. Sử dụng Prototype để Tối ưu hóa

Để tiết kiệm bộ nhớ, bạn có thể thêm các phương thức vào prototype của hàm constructor thay vì thêm chúng vào từng đối tượng. Điều này giúp giảm thiểu việc sao chép các phương thức cho mỗi đối tượng.

Ví dụ:

function Person(name, age) {
    this.name = name;
    this.age = age;
}

Person.prototype.sayHello = function() {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
};

const person1 = new Person('Alice', 30);
const person2 = new Person('Bob', 25);

person1.sayHello(); // In ra "Hello, my name is Alice and I am 30 years old."
person2.sayHello(); // In ra "Hello, my name is Bob and I am 25 years old."

4. Kế thừa với Constructor Pattern

Bạn có thể tạo các lớp con bằng cách sử dụng Constructor Pattern và call hoặc apply để kế thừa từ một lớp cha.

Ví dụ:

function Employee(name, age, position) {
    Person.call(this, name, age); // Kế thừa thuộc tính từ Person
    this.position = position;
}

// Thiết lập prototype để kế thừa phương thức từ Person
Employee.prototype = Object.create(Person.prototype);
Employee.prototype.constructor = Employee;

Employee.prototype.sayPosition = function() {
    console.log(`I work as a ${this.position}.`);
};

const employee1 = new Employee('Charlie', 28, 'Developer');
employee1.sayHello(); // In ra "Hello, my name is Charlie and I am 28 years old."
employee1.sayPosition(); // In ra "I work as a Developer."

Kết luận

Constructor Design Pattern là một cách hiệu quả để tạo ra các đối tượng trong JavaScript. Bằng cách sử dụng hàm constructor, prototype và kế thừa, bạn có thể tạo ra các đối tượng linh hoạt, dễ bảo trì và mở rộng. Mô hình này rất phổ biến trong việc xây dựng các ứng dụng lớn và phức tạp.