Protype trong javascript là gì?

Trong JavaScript, prototype là một thuộc tính có sẵn của mọi đối tượng (objects) và được sử dụng để chia sẻ các thành viên và phương thức giữa các đối tượng cùng một lớp hoặc kiểu.

Một số điểm quan trọng về prototype trong JavaScript:

  1. Prototype là một đối tượng: Mỗi đối tượng trong JavaScript đều có một prototype, mà là một đối tượng khác. prototype này có thể là một đối tượng rỗng hoặc chứa các thành viên (thuộc tính và phương thức).
  2. Kế thừa thông qua prototype: Khi bạn truy cập một thành viên của một đối tượng, JavaScript trước tiên kiểm tra xem nó có tồn tại trong đối tượng đó không. Nếu không, nó sẽ tìm trong prototype của đối tượng đó. Nếu không tìm thấy, nó sẽ tiếp tục tìm trong prototype của prototype, và cứ tiếp tục như vậy cho đến khi nó tìm thấy hoặc không tìm thấy thành viên đó.
  3. Constructor và Prototype: Mỗi hàm tạo đối tượng (constructor function) có một prototype. Khi bạn tạo một đối tượng từ hàm tạo đối tượng đó bằng cách sử dụng new, đối tượng mới sẽ thừa hưởng prototype của hàm tạo đối tượng đó.

Dưới đây là một ví dụ đơn giản về cách sử dụng prototype trong JavaScript:

// Định nghĩa một hàm tạo đối tượng
function Person(name, age) {
  this.name = name;
  this.age = age;
}

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

// Tạo đối tượng từ Person
const person1 = new Person('Alice', 30);
const person2 = new Person('Bob', 25);

// Gọi phương thức từ prototype
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.

Trong ví dụ này, Person là một hàm tạo đối tượng, và ta đã thêm một phương thức sayHello vào prototype của Person. Khi ta tạo đối tượng person1person2 từ Person, chúng thừa hưởng phương thức sayHello từ prototype và có thể gọi nó.

- Featured image -

No comments

Leave a comment!

Your email address will not be published. Required fields are marked *