01/10/2018, 16:11

Hỏi về Proxy trong JavaScript

Mình đang tìm hiểu về Proxy trong Javascipt mà thấy mơ hồ và mông lung quá.
Các bạn có thể giải thích hay cho mình xin 1 ví dụ nào đó dễ hiểu và trực quan nhất về nó được không.
Mình cám ơn các bạn.

Đoàn Trọng Hiếu viết 18:15 ngày 01/10/2018

Theo mình hiểu thì Proxy đơn giản là gắn trigger cho object.
Bạn tham khảo:

MDN Web Docs

Proxy

The Proxy object is used to define custom behavior for fundamental operations (e.g. property lookup, assignment, enumeration, function invocation, etc).


kipalog.com

Tìm hiểu những khái niệm lạ trong javascript (Phần 1)

(Ảnh) >Phần chém gió giới thiệu Javascript là ngôn ngữ rất si đa và càng học nó mình càng thấy nó sida vcđ, gần đây mình được tiếp xúc được với ...

giang viết 18:14 ngày 01/10/2018

tks bạn, thực sự là hai link trên bạn đưa mình cũng đọc qua cả rồi, thậm chí mình cũng đọc nhiều link khác nữa trên Google rồi … nhưng kết quả thu lại không được nhiều !

Híc … bạn còn phương pháp nào khác không ?

Đoàn Trọng Hiếu viết 18:23 ngày 01/10/2018

Vấn đề của bạn là gì ? Bạn không hiểu phần nào ?

giang viết 18:18 ngày 01/10/2018

Như bên link của Kipalog họ nói khi thực thi dòng lệnh này:

console.log(proxy1.secret); // log ra "easily scared" và trigger event

Mà mình không hiểu : nếu để log ra giá trị của đối tượng monster1 " easily scared " thì cũng đâu cần phải làm phức tạp vậy - và trigger event ở đây là trigger event nào ?

Đoàn Trọng Hiếu viết 18:22 ngày 01/10/2018

console.log(proxy1.secret); // log ra “easily scared” và trigger event

Mục tiêu chính của đoạn này không phải chỉ để log ra, cho nên có lẽ bạn đang hiểu nhầm nên mới nói như này :

đâu cần phải làm phức tạp vậy

Mục đích của câu lệnh trên là để GET ra thuộc tính của object, và câu lệnh này sẽ trigger event get.

MDN Web Docs

handler.get()

The handler.get() method is a trap for getting a property value.

明玉 viết 18:15 ngày 01/10/2018

Proxy trong Javascript tương đương với Proxy Pattern.
Ý tưởng của nó là dùng 1 object để đại diện cho một object khác, object đại diện đó có đầy đủ các thuộc tính, phương thức như object gốc, khi được access, object đại diện sẽ nối vào object gốc để đảm bảo behavior đúng như object gốc. Ngoài ra thì bạn cũng có thể thêm code vào object đại điện để làm nhiệm vụ logging, override tham số, override kết quả trả về, v.v.
Javascript là ngôn ngữ dùng dynamic dispatch cho nên việc làm Proxy là siêu dễ so với các ngôn ngữ khác, thậm chí nó còn mở rộng để dùng được với cả những access vào những thuộc tính, phương thức vốn không tồn tại.

Sáng Béo viết 18:15 ngày 01/10/2018

sao nghe giống Decorator Pattern quá vậy ạ?


à, hình như Proxy pattern thì bổ sung thêm xử lý vào method ngoài việc chính mà nó thực hiện, còn Decorator pattern thì bổ sung thêm method cho object.

Lê Minh Châu viết 18:27 ngày 01/10/2018

cho mình hỏi. khi nào thì dùng Proxy vậy, có thể cho mình xin 1 vài trường hợp đơn giản đc ko?

明玉 viết 18:28 ngày 01/10/2018

Thật sự mình chỉ biết ý tưởng của nó, còn để làm gì thật sự thì mình cũng mơ hồ
Bạn có thể google các ứng dụng của Proxy Pattern. Lưu ý Proxy của JS và Proxy Pattern chúng tương đương về ý tưởng chứ Implementation của 2 cái khác nhau.
Tham khảo repo tổng hợp ứng dụng Proxy bên JS:

GitHub

mikaelbr/proxy-fun

proxy-fun - For learning how to use JavaScript Proxy, or just to see what is possible

Bài liên quan
0