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

js
new Proxy(target, handler)

Note: Proxy() chỉ có thể được khởi tạo bằng new. Cố gắng gọi nó mà không có new sẽ ném ra TypeError.

Tham số

target

Đối tượng target cần bọc với Proxy. Có thể là bất kỳ loại đối tượng nào, bao gồm mảng gốc, hàm, hoặc thậm chí một proxy khác.

handler

Một đối tượng có các thuộc tính là hàm xác định hành vi của proxy khi một thao tác được thực hiện trên nó.

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:

  • target là đối tượng bạn muốn tạo proxy
  • handler là đố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.getOwnPropertyNamesObject.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, notProxiedproxied. 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.

js
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