Javascript - Prototype là cái gì?

9/18/2020 4:41 PM | Lập trình

Nhắc tới javascript chắc không ai không biết về prototype nhưng không phải ai cũng hiểu rõ về prototype. Bài này mình sẽ chia sẻ cụ thể prototype là gì. Phong cách hài hước nhé.

Prototype là hệ thống phân chia quyền lực của giang hồ !

Sở dĩ ta nói như vậy là vì Khi hỏi object 1 property nào đó, nếu bản thân nó ko làm dc, nó sẽ nhờ prototype của nó, prototype này tuy-mặt-đầy-thẹo nhưng nếu vẫn chưa làm nổi, sẽ lại tiếp tục hỏi prototype cấp trên và cứ thế cho đến thằng prototype đại ca nhất, quyền lực nhất có tên là Object.prototype mà giang hồ còn gọi là bố già.

Object.getPrototypeOf(Object.prototype)
// null

Trên cấp của Object.prototype là ko có, do đó nó là soái ca nhất.

Array rất lưu manh và chỉ nghe lệnh cấp trên của nó là Array.prototype, nhưng đáng tiếc thằng này cũng là lính của Object.prototype thôi.

Function chợ búa cũng thế, hết mình vì đại ca Function.prototype của nó. Vị đại ca này, tuy mạnh nhưng vẫn là đàn em của Object.prototype.

Object.getPrototypeOf([]) === Array.prototype
// true

Object.getPrototypeOf(Function) === Function.prototype
// true

 

alt text

Như vậy ta có thể nói trong javascript, đại đa số đều là lính của object, hay nói cách khác trong javascript toàn bộ đều là object, ngoại trừ cặp vợ chồng suốt ngày sống trong cổ mộ, không thích ra đường: anh dương-undefined và chị tiểu-long-null.

Hiểu đặc tính của prototype, ta có thể lợi dụng nó để thêm chức năng cho đệ tử, kiểu như nếu sư phụ có thịt ăn thì đệ tử cũng phải được chia chén canh.

Lấy ví dụ, nếu ban đầu vợ chỉ biết mổi nấu ăn.

function Wife() {
  this.cook = function() { 
    console.log('nấu mì chua-cay-hao-hao'); 
  }
}

var ngoctrinh = new Wife();
ngoctrinh.cook(); 
// in ra nấu mì ...

mà thật ra thì ăn mì mãi cũng chán, do đó chúng ta sẽ thêm tính năng cho vợ

// thêm tính năng ấy vào function vợ.
Wife.prototype.ay = function() {
  // chức năng này khó, do các bạn tự code !
}

Như vậy, chúng ta biết ngoctrinh là đệ tử của Wife, hay nói cách khác là instance của constructor Wife. Do đó ngoctrinh ngay lập tức biết "ấy". Chúng ta có thể trực tiếp gọi ngoctrinh.ay() để kiểm tra.

Nguy hiểm hơn nữa, chúc ta có thể trực tiếp dạy cho Object.prototype tuyệt thế võ công makeSandwich:

Object.prototype.makeSandwich = function() {
  console.log('sudo make me a sandwich');
}

Và như thế ngoctrinh đã biết làm bánh

ngoctrinh.makeSandwich();
// sudo make me a sandwich

Là một coder hay tò và mò, chúng ta cần kiểm tra lại xem ngoctrinh biết làm những gì.

for(var skill in ngoctrinh) { console.log(skill); }
// cook (tự biết)
// ay ( mẹ vợ dạy)
// makeSandwich ( mẹ của mẹ vợ dạy )

Tuy nhiên, thật bất ngờ ngoctrinh còn biết toString(), toLocaleString(), hasOwnProperty() v..v.. nữa, mấy thứ này là quà khuyến mãi tặng kèm từ 2 bên nhà nội ngoại của ngoctrinh, mà chúng ta ko cần.

Chưa hết, ai lại muốn 1 bà vợ mà tuỳ thời sẽ bị nhà vợ dạy thêm vào những thứ khác, không thể kiểm soát dc. Một ngày đẹp trời nào đó, lỡ như:

Object.prototype.karate = function() {
  console.log('dùng khi chồng nhậu khuya');
}

Thì coi như xong. Do đó trong những trường hợp này, khi mà chúng ta ko cần đến sức mạnh của prototype, ko cần kế thừa gì cả, thì Object.create(null) sẽ giúp chúng ta tạo ra object thuần khiết, trong trắng ko kế thừa.

var ngoctrinh = Object.create(null);

Object.prototype.karate = function() {
  console.log('dùng khi chồng nhậu khuya');
}

ngoctrinh.karate(); 
// TypeError: ngoctrinh.karate is not a function
// yay so much win !

Vậy là chúng ta tha hồ đi nhậu về khuya.

Nguồn: kipalog.com

Tin tức khác

  • Tạo chatbot với CHAT GPT sử dụng C#

    Tạo chatbot với CHAT GPT sử dụng C#

    Trong hướng dẫn này, chúng ta sẽ đi sâu vào quá trình xây dựng chatbot bằng ChatGPT và C#. Chúng tôi sẽ đề cập đến mọi thứ, từ thiết lập quyền truy cập API ChatGPT đến triển khai chatbot của bạn. Bắt đầu nào!

  • Remote SQL Server. Cách mở port 1433 để kết nối với sqlserver từ xa.

    Remote SQL Server. Cách mở port 1433 để kết nối với sqlserver từ xa.

    Hiện nay nhiều người có xây dựng cơ sở dữ liệu trên server và kết nối tới để làm việc cho tiện. Nên mình chia sẻ bài viết này cho người mới nhé.

  • Sự khác nhau giữa Application, Virtual Direction và Site. Cách tạo 1 Virtual Direction.

    Sự khác nhau giữa Application, Virtual Direction và Site. Cách tạo 1 Virtual Direction.

    Trong IIS, bạn có thể tạo các trang web, ứng dụng và thư mục ảo để chia sẻ thông tin với người dùng qua Internet, mạng nội bộ hoặc mạng phụ. Mặc dù các khái niệm này đã tồn tại trong các phiên bản trước của IIS, một số thay đổi trong IIS 7 trở lên ảnh hưởng đến định nghĩa và chức năng của các khái niệm này. Quan trọng nhất, các trang web, ứng dụng và thư mục ảo giờ đây hoạt động cùng nhau theo mối quan hệ phân cấp như những khối xây dựng cơ bản để lưu trữ nội dung trực tuyến và cung cấp dịch vụ trực tuyến.

  • Design pattern là gì? Tại sao nên sử dụng Design pattern?

    Design pattern là gì? Tại sao nên sử dụng Design pattern?

    Design pattern là các giải pháp tổng thể đã được tối ưu hóa, được tái sử dụng cho các vấn đề phổ biến trong thiết kế phần mềm mà chúng ta thường gặp phải hàng ngày. Đây là tập các giải pháp đã được suy nghĩ, đã giải quyết trong tình huống cụ thể.

  • CDN là gì? Khi nào thì cần xài CDN cho website

    CDN là gì? Khi nào thì cần xài CDN cho website

    Thuật ngữ CDN có thể bạn sẽ bắt gặp khá nhiều bài viết trên thachpham.com, hoặc khi bạn cần một người có kinh nghiệm tư vấn giải pháp tiết kiệm băng thông máy chủ và tăng tốc độ website đều sẽ được nghe tư vấn là sử dụng CDN. Vậy CDN chính xác là cái gì, có bao nhiêu loại CDN, và website của bạn có thích hợp để sử dụng CDN không thì bài này sẽ cung cấp cho bạn các thông tin cần thiết đó.

  • Giao thức HTTP và HTTPS là gì? Tại sao nên sử dụng HTTPS?

    Giao thức HTTP và HTTPS là gì? Tại sao nên sử dụng HTTPS?

    Môi trường internet phát triển, kéo theo tội phạm mạng tăng cao, vì thế cần có những chuẩn bảo mật web cao hơn. Đó là lí do giao thức HTTPS dần thay thế hoàn toàn HTTP. Vậy, giao thức HTTPS là gì? HTTP và HTTPS khác nhau như thế nào? Và tại sao các website nên dùng HTTPS thay vì HTTP? Bài viết này sẽ giúp bạn giải đáp tất cả những thắc mắc đó.

  • Tích hợp zalo vào website.

    Tích hợp zalo vào website.

    Nếu bạn là một người có website bán hàng thì việc liên hệ thuận lợi nhanh cho khách hàng luôn là ưu tiên hàng đầu. Cũng chính vì lí dó này mình đã tìm hiểu sau khi chèn cho website của mình. Thấy hay nên chia sẻ cho mọi người có nhu cầu.