Prototype là quan niệm cơ bản trong JavaScript với là vẻ ngoài quan trọng đặc biệt vào Việc xúc tiến quy mô OOPhường trong JavaScript (nhưng mà không thực thụ hoàn hảo nhỏng trong những ngữ điệu class-based khác), bởi vì như vẫn biết, vào JavaScript, không có có mang class như các ngữ điệu phía đối tượng người dùng khác ví như Java tuyệt C#. Bài viết này vẫn trình diễn qua loa về định nghĩa này.

Bạn đang xem: Prototype trong javascript

Prototype object

Để dễ nắm bắt, họ xem xét function sau:

function Person(firstName, lastName) this.firstName = firstName; this.lastName = lastName;khi function Person được sinh sản, mặc định nó sẽ sở hữu một property có tên là prototype (để ý là function vào JavaScript cũng là 1 object). Property này là một trong object nhưng mà lúc đầu chỉ có đựng một property là constructor trỏ ngược lại function Person. Và lúc function Person này được Call cùng với từ khóa new, object bắt đầu được sinh sản đã kế thừa tất cả các property tự Peron.prototype. Để kiểm soát, họ cấp dưỡng Person.prototype một method là showFullName() nlỗi sau:

Person.prototype.showFullName = function() console.log(this.firstName + " " + this.lastName);var justin = new Person("Justin", "Vo");console.log(justin); // Person firstName: "Justin", lastName: "Vo"justin.showFullName(); // Justin VoNgười ta có cách gọi khác Person.prototype là prototype object giỏi gọn gàng rộng là prototype của object justin, tương tự như bất kì object như thế nào được chế tác cùng với cú pháp new Person(...).

var david = new Person("David", "Truong");console.log(david); // Person firstName: "David", lastName: "Truong"david.showFullName(); // David TruongThật ra bạn cũng có thể knhị báo method showFullName() tức thì bên phía trong function Person. Tuy nhiên, bởi vì method showFullName() là giống nhau sinh sống phần lớn object, đề nghị bọn họ chuyển nó lên Person.prototype để các object kế thừa lại (nguyên lý Don"t Repeat Yourself - DRY). Và đó cũng là một trong những trong các các best practice vào JavaScript: constructor chỉ khởi tạo những property hiếm hoi cho từng object được tạo nên, còn các method áp dụng phổ biến cho gần như object sẽ được chế tạo sinh sống prototype.

function Person(firstName, lastName) this.firstName = firstName; this.lastName = lastName; this.friends = <>;Person.prototype.showFullName = function() console.log(this.firstName + " " + this.lastName);Person.prototype.addFriend = function(friend) this.friends.push(friend);var vancanh = new Person("Canh", "Dinh");var justin = new Person("Justin", "Vo");var micheal = new Person("Micheal", "Huynh");console.log(vancanh.friends); // <>;vancanh.addFriend(justin);vancanh.addFriend(micheal);console.log(vancanh.friends); // Các object khoác định tất cả sẵn vào JavaScript cũng được kiến tạo Theo phong cách giống như nhỏng trên. ví dụ như, prototype của các object được tạo nên với cú pháp new Object() hoặc là Object.prototype, những array được tạo ra với cú pháp new Array() hoặc <> là Array.prototype cùng tựa như như thế cho những object khác như RegExp xuất xắc Date. Object.prototype được kế thừa vì chưng hầu hết object với bản thân nó không có prototype (nói theo cách khác, prototype của chính nó là null).

Xem thêm: Nghĩa Của Từ Trouble Maker Là Gì ? Định Nghĩa, Ví Dụ, Giải Thích

Thực tế thì chúng ta tất yêu truy vấn được prototype của một object cùng cũng ko quan trọng đề xuất cần sử dụng mang đến nó, mặc dù, ví dụ như vào Chrome, nó cho phép họ truy cập vào prototype của một object thông sang 1 property "giả" là __proto__.

*

Prototype chain

Cơ chế prototype chain rất solo giản: Khi họ truy vấn vào trong 1 property của một object, JavaScript engine đang kiếm tìm property đó bên phía trong bao gồm object, giả dụ không tồn tại nó đang kiếm tìm lên phía trên prototype của object, với cứ liên tiếp như thế cho đến Khi chạm chán Object.prototype thì dừng cùng tạo ra tác dụng (undefined giả dụ không kiếm thấy). Ví dụ:

var obj1 = a: 1 ;var obj2 = Object.create(obj1);obj2.b = 2;console.log(obj1.a); // 1console.log(obj2.a); // 1console.log(obj2.b); // 2console.log(obj2.c); // undefinedTrong ví dụ trên, Object.create() sẽ tạo một object mới obj2 với prototype là obj1. Và như đang thấy, tuy vậy obj2 không tồn tại property a, tuy nhiên chúng ta vẫn có thể truy vấn nó phụ thuộc qui định prototype chain.

Kết

Mình xin tạm ngưng bài viết tại đây vày có lẽ rằng đã khá lâu năm. Trên trên đây mình đã cố gắng trình bày về prototype Theo phong cách dễ hiểu. Hi vọng qua bài viết này sẽ giúp chúng ta đọc rộng về khái niệm prototype trong JavaScript.