Skip to content

Proxy和Reflect

概述

Proxy和Reflect是ES6中新增的两个重要的内置对象,它们提供了拦截对象的方法。

Proxy是一种新的数据类型,它允许你创建一个对象,并通过拦截对该对象的属性的访问,来控制对该对象的访问。

Reflect是ES6中新增的一个对象,它提供了一些静态方法,用来操作对象上的属性和方法。

Proxy

Proxy是一种新的数据类型,它允许你创建一个对象,并通过拦截对该对象的属性的访问,来控制对该对象的访问。

Proxy的语法如下:

javascript
const proxy = new Proxy(target, handler);
  • handler:一个对象,其属性是一组函数,它们定义了对目标对象属性的拦截行为。
  • target:目标对象,即要拦截其属性的对象。

下面是一个例子:

javascript
const target = {
    a: 1,
    b: 2,
    c: 3
};

const handler = {
    get: function (target, prop, receiver) {
        console.log(`Getting ${prop}`);
        return target[prop];
    },
    set: function (target, prop, value, receiver) {
        console.log(`Setting ${prop} to ${value}`);
        target[prop] = value;
        return true;
    }
};

const proxy = new Proxy(target, handler);

console.log(proxy.a); // Getting a, 1
console.log(proxy.b); // Getting b, 2
console.log(proxy.c); // Getting c, 3

proxy.a = 4; // Setting a to 4
console.log(proxy.a); // 4

Reflect

Reflect是ES6中新增的一个对象,它提供了一些静态方法,用来操作对象上的属性和方法。

Reflect的语法如下:

javascript
Reflect.method(target, ...args)
  • method:要调用的方法名。
  • target:目标对象。
  • args:方法参数。

下面是一个例子:

javascript
const target = {
    a: 1,
    b: 2,
    c: 3
};

Reflect.ownKeys(target); // ["a", "b", "c"]

Reflect.get(target, "a"); // 1
Reflect.set(target, "a", 4); // true
Reflect.has(target, "d"); // false

总结

Proxy和Reflect是ES6中新增的两个重要的内置对象,它们提供了拦截对象的方法。

Proxy允许你创建一个对象,并通过拦截对该对象的属性的访问,来控制对该对象的访问。

Reflect提供了一些静态方法,用来操作对象上的属性和方法。

Proxy和Reflect的使用场景非常广泛,可以用来实现各种功能,比如数据绑定、函数劫持、对象检查、函数重载等。