Skip to content

Proxy 和 Object.defineProperty 的区别是啥?

Posted on:2024年8月14日 at 20:08

ProxyObject.defineProperty 都可以用来拦截和操作对象的属性访问,但它们在功能、灵活性和适用场景上有显著的区别。

1. Object.defineProperty

功能

使用场景

示例代码

const obj = {};
Object.defineProperty(obj, "name", {
  value: "Alice",
  writable: true,
  enumerable: true,
  configurable: true,
});

console.log(obj.name); // Alice

Object.defineProperty(obj, "name", {
  get() {
    return "Bob";
  },
});

console.log(obj.name); // Bob

限制

2. Proxy

功能

使用场景

示例代码

const target = {
  name: "Alice",
};

const handler = {
  get(target, property) {
    return property in target ? target[property] : "Default";
  },
  set(target, property, value) {
    target[property] = value.toUpperCase();
    return true;
  },
};

const proxy = new Proxy(target, handler);

console.log(proxy.name); // Alice
proxy.name = "Bob";
console.log(proxy.name); // BOB
console.log(proxy.age); // Default

优点

原文转自:https://fe.ecool.fun/topic/82d187ea-2abe-4ad5-bffc-429098f18d25