Understand JavaScript - Reflection And Extend

Hãy dành một chút thời gian để nói về một khía cạnh khác khi chúng ta tạo ra các Object , nó khá hữu ích với chúng ta trong rất nhiều trường hợp. Trong thực tế là nhiều Lib và Framekwork có chứa những tính năng rất giống nhau được gọi là Extend (mở rộng) và Mở Rộng nguyên tắc cốt lõi của nó dựa trên tính chất Reflection

Reflection : là một tính chất của Object có khả năng xem xét các Property của Object để thay đổi hoặc làm bất kì điều gì , chúng ta có thể lợi dụng điều đó để thực hiện một mô hình rất lợi hại gọi là Extend .

Cùng đến với một ví dụ :


Kết quả :


Bạn có thấy bất ngờ ?
Vòng lặp ForIn đã lấy tất cả các cặp key-value thậm chỉ nó còn tìm cả ở trong proto.

Nếu bạn muốn chỉ lấy những property nằm trên John hãy dùng hàm hasOwnProperty


Kết quả  :


Bạn có thể thấy mình có thể Reflaction Object John và nhìn vào các Property của nó , cho dù nó có được gắn liền với đối tượng hay không ?

Ví dụ :


Kết quả :



Mình kết hợp hay gọi là hợp nhất các đối tượng này , John lấy tất cả các Property của các Object khác mà mình tạo ra cho nó , chú ý rằng hàm này không nối thêm bất kì prototype nào vào prototype chain nhé , nó đơn giản chỉ thêm property vào John thôi.

Vì vậy khi mình log John bạn sẽ thấy rằng , những property của object jane và jim được bổ sung vào John :


Hàm extend của Underscore lợi dụng tính chất Reflection của JS , mình sẽ chứng minh cho bạn thấy .

=> Cùng xem mã nguồn của lib Underscore :


Bạn có thể thấy rằng underscore lợi dụng tính chất Reflection nó xem danh sách các Property và customer lại , mô hình này rất phổ biến ở trong các lib và các fw hiện nay



Nhận xét

Bài đăng phổ biến