Bài viết được sự cho phép của tác giả Lưu Bình An
let proxy = new Proxy(target, handler)
target
là object chính chủhandler
khai báo các phương thức sẽ bị can thiệp
let target = {}
let proxy = new Proxy(target, {})
proxy.test = 5;
alert(target.test); // 5
alert(proxy.test); // 5
Do không truyền một handler nào, nên test
sẽ không thay đổi
Xem thêm việc làm JavaScript lương cao trên TopDev
Giờ chúng ta muốn can thiệp vào phương thức get
(khi chúng ta gọi object.prop
)
Ví dụ khác, chúng ta có một dãy số, chỉ cho phép thêm vào kiểu number
, nếu cố tình thêm vào một kiểu dữ liệu khác sẽ không thực hiện được và trả về lỗi
Một ứng dụng khác, bảo vệ các thuộc tính internal
của một object, ví dụ chúng ta có một số property bắt đầu bằng _
, chúng ta không cho phép truy cập các property
Nếu object của chúng ta là một function thì sao nhỉ?
Ví dụ với hàm delay
sau, hàm này cho phép delay thời gian hàm được thực thi bằng setTimeout
Chúng ta sẽ có một cách viết khác với Proxy
, điểm khác biệt là Proxy
sẽ chuyển tiếp luôn tất cả những property khác của function (như name
, length
)
Chúng đã đề cập đến các phương thức tiền xử lý ownKeys
, deleteProperty
, get
, set
, apply
. Ngoài ra nó còn có các phương thức khác các bạn có thể thảm khảo thêm
has
: trigger khi thực thiin
apply
: trigger khi thực thi một functionconstruct
: trigger vớinew
getPrototypeOf
: Object.getPrototypeOfsetPrototypeOf
: Object.setPrototypeOfisExtensible
: Object.isExtensiblepreventExtensions
: Object.preventExtensionsdefineProperty
: Object.definePropertygetOwnPropertyDescriptor
: Object.getOwnPropertyDescriptor
Ví dụ lấy từ Javascript.info
Bài viết gốc được đăng tải tại vuilaptrinh.com
Có thể bạn quan tâm:
- JavaScript đã tạo ra Object từ Function như thế nào?
- Giới thiệu fetch() của javascript
- Các ưu nhược điểm của Swift so với Objective C
Xem thêm việc làm IT hấp dẫn trên TopDev