- Published on
Prototype trong Javascript là gì?
- Authors
- Name
- Tien Minh Pham
- @TinMinhPhm1
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ácprototype
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ả person1
và person2
đề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.