Sự khác nhau giữa Object Method và Prototype’s Method

// Approach 01
function Person(name, age) {
   this.name = name;
   this.age = age
   this.talk = function() {
      console.log("blabla")
   }
}

var person01 = new Persion('01', 1)
var person02 = new Persion('02', 2)
// Approach 02
function Person(name, age) {
}

Person.prototype.talk = function() {
    console.log("blabla")
}
var person01 = new Persion('01', 1)
var person02 = new Persion('02', 2)

1. Ý nghĩa trong việc sử dụng bộ nhớ.

  • Đối với Approach 1 việc sử dụng bộ nhớ sẽ như sau:
    • 1 địa chỉ bộ được sử dụng cho Constructor method.
    • Khi khởi tạo 2 đối tượng Persio01, 2 địa chỉ bộ nhớ sẽ được tạo cho 2 biến persion01, persion02. Đồng thời các thuộc tính, method cũng đi theo 2 đối tượng persion01, persion02.
      • Tức thuộc tính name, age, talk sẽ đi theo đối tượng được tạo lập nên. Nếu persion01 hoặc persion02 modify lại method đó thì cũng không ảnh hướng tới đối tượng khác.
  • Đối với Approach 2, số lượng địa chỉ cũng tương tự, tuy nhiên person1, person2 sẽ được khởi tạo method.
    • Nó lần kiếm trong bản thân nó không có, sau đó sẽ tìm trong person1.__proto__.talk để sử dụng.
    • Do đó nếu Class Persion tạo ra nhiều đối tượng, thì các đối tượng này đều sử dụng những method được thiết kế trong Prototype. Điều này sẽ tiết kiệm được bộ nhớ.

2. Ý nghĩa trong việc khi báo những common method của Class.

  • Khi một Class khi báo ra những common Method, thì nếu để trên Prototype –> Khi thay đổi, update lại logic của method đó trong quá trình runtime thì tất cả đối tượng từ Class đó sẽ sử dụng được method được cập nhật.


Nguồn tham khảo
https://veerasundar.com/blog/2014/02/javascript-prototype-methods-vs-object-methods/

Leave A Reply

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