planets-top
Published on

Prototype trong Javascript là gì?

Authors

Trong JavaScript, prototype là một cơ chế cho phép các đối tượng chia sẻ thuộc tính và phương thức. Mỗi hàm trong JavaScript đều có một thuộc tính prototype, và khi hàm đó được sử dụng như một hàm tạo (constructor) để tạo ra một đối tượng mới, thuộc tính prototype sẽ trở thành nguyên mẫu của đối tượng mới đó.

Cách hoạt động của Prototype:

  • Prototype của đối tượng: Khi tạo một đối tượng mới thông qua hàm tạo (constructor), đối tượng đó sẽ tự động nhận một liên kết đến prototype của hàm tạo. Điều này có nghĩa là đối tượng có thể truy cập các thuộc tính và phương thức được định nghĩa trong prototype của hàm tạo.
  • Chuỗi nguyên mẫu (Prototype Chain): Nếu JavaScript không tìm thấy một thuộc tính hoặc phương thức trực tiếp trên đối tượng, nó sẽ tìm trong prototype của đối tượng đó. Quá trình này tiếp tục tìm lên các prototype cha của đối tượng cho đến khi tìm thấy thuộc tính, phương thức hoặc kết thúc ở Object.prototype.

Ví dụ về Prototype:

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

// Thêm một phương thức vào prototype của hàm Person
Person.prototype.sayHello = function () {
  console.log(`Hello, my name is ${this.name}`)
}

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

// Cả person1 và person2 đều có thể truy cập phương thức sayHello
person1.sayHello() // Output: Hello, my name is Alice
person2.sayHello() // Output: Hello, my name is Bob

Trong ví dụ này, sayHello được thêm vào Person.prototype, vì vậy cả person1person2 đều có thể sử dụng phương thức này mà không cần định nghĩa lại trong từng đối tượng. Điều này giúp tiết kiệm bộ nhớ và duy trì tính nhất quán trong mã nguồn.

Lợi ích của Prototype:

  • Tiết kiệm bộ nhớ: Các phương thức chỉ cần được định nghĩa một lần và có thể được chia sẻ giữa các đối tượng.
  • Tính kế thừa: Cho phép tạo ra các mô hình kế thừa trong JavaScript, giúp các đối tượng mới kế thừa các thuộc tính và phương thức từ các đối tượng cha.

Prototype là một phần quan trọng của JavaScript và được sử dụng rộng rãi trong lập trình hướng đối tượng.