Proxy() constructor
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.
Constructor Proxy() tạo các đối tượng Proxy.
Cú pháp
new Proxy(target, handler)
Tham số
Mô tả
Dùng constructor Proxy() để tạo một đối tượng Proxy mới. Constructor này nhận hai đối số bắt buộc:
targetlà đối tượng bạn muốn tạo proxyhandlerlà đối tượng xác định hành vi tùy chỉnh của proxy.
Một handler rỗng sẽ tạo ra một proxy hoạt động, trong hầu hết các khía cạnh, giống hệt target. Bằng cách định nghĩa bất kỳ hàm nào trong một tập hợp các hàm trên đối tượng handler, bạn có thể tùy chỉnh các khía cạnh cụ thể trong hành vi của proxy. Ví dụ, bằng cách định nghĩa get() bạn có thể cung cấp phiên bản tùy chỉnh cho property accessor của target.
Các hàm handler
Phần này liệt kê tất cả các hàm handler bạn có thể định nghĩa. Các hàm handler đôi khi được gọi là trap, vì chúng bắt các lời gọi đến đối tượng target.
handler.apply()-
Một trap cho lời gọi hàm.
handler.construct()-
Một trap cho toán tử
new. handler.defineProperty()-
Một trap cho
Object.defineProperty. handler.deleteProperty()-
Một trap cho toán tử
delete. handler.get()-
Một trap cho việc lấy giá trị thuộc tính.
handler.getOwnPropertyDescriptor()-
Một trap cho
Object.getOwnPropertyDescriptor. handler.getPrototypeOf()-
Một trap cho
Object.getPrototypeOf. handler.has()-
Một trap cho toán tử
in. handler.isExtensible()-
Một trap cho
Object.isExtensible. handler.ownKeys()-
Một trap cho
Object.getOwnPropertyNamesvàObject.getOwnPropertySymbols. handler.preventExtensions()-
Một trap cho
Object.preventExtensions. handler.set()-
Một trap cho việc thiết lập giá trị thuộc tính.
handler.setPrototypeOf()-
Một trap cho
Object.setPrototypeOf.
Ví dụ
>Chọn lọc proxy các property accessor
Trong ví dụ này, target có hai thuộc tính, notProxied và proxied. Chúng ta định nghĩa một handler trả về giá trị khác cho proxied, và cho phép bất kỳ truy cập nào khác đi thẳng đến target.
const target = {
notProxied: "original value",
proxied: "original value",
};
const handler = {
get(target, prop, receiver) {
if (prop === "proxied") {
return "replaced value";
}
return Reflect.get(...arguments);
},
};
const proxy = new Proxy(target, handler);
console.log(proxy.notProxied); // "original value"
console.log(proxy.proxied); // "replaced value"
Đặc tả kỹ thuật
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-proxy-constructor> |
Tương thích trình duyệt
Xem thêm
- Hướng dẫn Lập trình meta
Reflect